嵌套选择查询重构并转换为Eloquent / Query Builder

时间:2014-10-22 13:00:11

标签: mysql laravel eloquent fluent query-builder

第1步:从表中获取最大的set_id。 set_id不是唯一的。

select max(set_id) from mytable where ver = 6;
# assume returns 3

步骤2:从set_id为max的表中获取结果:

select * from mytable where ver = 6 and set_id = 3;
# from step 1

步骤3:重构/嵌套select语句

select * from mytable where ver = 6 and set_id = 
    ( select max(set_id) from mytable where ver = 6 );

是否有更清晰的方式撰写此声明?

如何将此语句翻译为Eloquent / Fluent查询构建器?

2 个答案:

答案 0 :(得分:1)

我会写这样的声明:

SELECT * from mytable WHERE ver=6 ORDER BY set_id DESC LIMIT 1;

将转换为:

DB::table('mytable')->where('ver', 6)->orderBy('set_id', 'DESC')->first();

答案 1 :(得分:0)

您可以创建更高级的where子句:

DB::table('mytable')
    ->where('ver', '=', 6)
    ->where('set_id', '=', function($query)
    {
        $query->from('mytable')
              ->select(DB::raw('max(set_id)'))
              ->where('ver', '=', 6);
    })
    ->get();