Laravel Query Builder其中max id

时间:2014-04-15 01:36:38

标签: php laravel query-builder

如何在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)'));

有什么想让它变得更好吗?

6 个答案:

答案 0 :(得分:45)

您应该能够在订单表上执行选择,使用原始WHERE在子查询中查找max(id),如下所示:

 \DB::table('orders')->where('id', \DB::raw("(select max(`id`) from orders)"))->get();

如果您想使用Eloquent(例如,您可以将响应转换为对象),您将需要使用whereRaw,因为某些功能(如toJSONtoArray)将无效使用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');