如何在Laravel 4.1 Query Builder中完成此操作?
select * from orders where id = (select max(`id`) from orders)
我试过这个,工作但不能得到雄辩的功能。
DB::select(DB::raw('select * from orders where id = (select max(`id`) from orders)'));
有什么想让它变得更好吗?
答案 0 :(得分:45)
您应该能够在订单表上执行选择,使用原始WHERE在子查询中查找max(id
),如下所示:
\DB::table('orders')->where('id', \DB::raw("(select max(`id`) from orders)"))->get();
如果您想使用Eloquent(例如,您可以将响应转换为对象),您将需要使用whereRaw,因为某些功能(如toJSON
或toArray
)将无效使用Eloquent模型。
$order = Order::whereRaw('id = (select max(`id`) from orders)')->get();
当然,这需要你有一个扩展Eloquent的模型。
class Order extends Eloquent {}
如评论中所述,您不需要使用whereRaw
,您可以使用不带原始SQL的查询构建器来执行整个查询。
// Using the Query Builder
\DB::table('orders')->find(\DB::table('orders')->max('id'));
// Using Eloquent
$order = Order::find(\DB::table('orders')->max('id'));
(请注意,如果id
字段不是唯一的,只会返回一行 - 这是因为find()
只返回SQL的第一个结果服务器)。
答案 1 :(得分:37)
就像docs say
一样DB::table('orders')->max('id');
答案 2 :(得分:15)
对于Laravel ^ 5
Orders::max('id');
我用的是短暂而且最好的;
答案 3 :(得分:14)
无需使用子查询,只需尝试此操作,其工作正常:
DB::table('orders')->orderBy('id', 'desc')->first();
答案 4 :(得分:3)
对于对象,您可以嵌套查询:
DB::table('orders')->find(DB::table('orders')->max('id'));
因此内部查询会查找表中的最大ID,然后将其传递给find,这会让您返回对象。
答案 5 :(得分:0)
基于Laravel Documentation,以下操作应该有效:
构造查询后,您可以调用max
方法:DB::table('orders')->max('id');