使用max()的查询构建器

时间:2015-03-31 21:22:13

标签: laravel-4

我正在尝试将此sql重写为laravel 4

SELECT
    *
FROM
    SolutionFile
WHERE
    SolutionFile.group_id = $group_id and
    version = (
         SELECT
             max(s1.version)
         FROM
             SolutionFile s1
         WHERE
             s1.group_id = $group_id
    )

我写了这个请求

SolutionFile::where('group_id', '=', $group_id)
    ->whereRaw('version = (select max(`version`) from files where group_id = ' . $group_id . ')')->get();

效果很好,但是我想用" laravel方式重写它"没有whereRaw。 我试过这个请求

SolutionFile::where('group_id', '=', $group_id)
    ->where(function($query) use($group_id) {
            return $query->where('version', '=', function() use($group_id) {
                return SolutionFile::where('group_id', '=', $group_id)->max('version');
            });
        });

但它返回一个空集。

有没有办法重写它?我在上一次请求中哪里犯了错误?

1 个答案:

答案 0 :(得分:0)

我找到了这个简单的解决方案

SolutionFile::where('group_id', '=', $group_id)
                        ->where(function($query) use($group_id) {
                            return $query->where('version', '=', SolutionFile::where('group_id', '=', $group_id)->max('version'));
                        })->get()

没有必要使用function()作为第三个参数,只是来自此函数的结果。