微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel 4 – 模特内部的平均得分?

我想在我的数据库中返回游戏评论的平均分数.我正在用Laravel 4构建我的网站.

表结构:

GAMES (id,title,etc)
REVIEWS (game_id,user_id,score,etc)

控制器:

public function singleGame($id)
{
    $game = Game::find($id);

    if ($game)
    {
        return View::make('game')->with('game',$game);
    }
    else
    {
        return Redirect::to('/');
    }
}

我的想法是希望在我的观点中通过$game->平均值返回游戏的平均分数,但是我无法通过摆弄我的游戏模型来产生预期的结果.

游戏模型:

public function scores()
{
    return $this->hasMany('Review')->avg('score');
}

我已经尝试了一些查询构建器可用的方法,但是当我谈到Laravel / PHP时,我仍在学习绳索,所以我有点卡住了.也许我应该以不同的方式解决问题?

谢谢.

这里有两种选择:

可读性(两个查询)

$game = Game::find(1);
$game->average = $game->reviews()->avg('score');

请注意,这假设您的游戏模型中的关系具有评论功能.

public function reviews()
{
    return $this->belongsTo('Game');
}

此替代方案使用avg aggregate功能. QueryBuilder提供的聚合函数仅返回聚合标量.

表现(一个查询)

如果你真的想在一个查询中这样做.这是一个替代方案:

$game = Game::select('games.*',DB::raw('avg(reviews.score) AS average'))
    ->join('reviews','reviews.game_id','=','game.id')
    ->groupBy('reviews.game_id')
    ->where('game.id',1)
    ->first();

原文地址:https://www.jb51.cc/laravel/135982.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。