Laravel Eloquent - 选择MAX和其他列

时间:2015-07-19 13:53:01

标签: php mysql laravel eloquent

我正在尝试与MAX一起选择多个列。原始查询类似于:SELECT users.id, ..., MAX(ur.rank) AS rank但我无法弄清楚如何使用Laravel在Eloquent中提供的查询构建器来完成它。

这是我的尝试:

$user = User::join('users_ranks AS ur', function($join) {
    $join ->on('ur.uid', '=', 'users.id');
})
->where('users.id', '=', 7)
->groupBy('users.id')
->first(['users.id', 'users.username', 'MAX(ur.rank) AS rank']);

我根本想不出来。我想要实现的是我选择user.id = 7的用户,并且我想要在users_ranks中选择其users_ranks.uid = users.id的MAX等级。

我被告知要避免使用子查询,因为在处理大型结果集时,它可能会大大减慢速度。

有人能指出我正确的方向吗?感谢。

1 个答案:

答案 0 :(得分:5)

我认为你应该像这样重写它:

DB::table('users')
    ->select(['users.id', 'users.username', DB::raw('MAX(ur.rank) AS rank')])
    ->leftJoin('users_ranks AS ur', 'ur.uid', '=', 'users.id')
    ->where('users.id', '=', 7)
    ->groupBy('users.id')
    ->first();

如果您稍后使用表名并且不想获取所有字段(User::),则无法使用'users.id', 'users.username'