Laravel Query Builder,其中 max id

2022-08-30 10:40:15

如何在 Laravel 4.1 查询生成器中完成此操作?

select * from orders where id = (select max(`id`) from orders)

我试过这个,工作,但无法获得雄辩的功能。

DB::select(DB::raw('select * from orders where id = (select max(`id`) from orders)'));

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


答案 1

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

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

如果你想使用 Eloquent(例如,这样你就可以将响应转换为对象),你会想要使用 whereRaw,因为有些函数,如 or,如果不使用 Eloquent 模型,将无法工作。toJSONtoArray

 $order = Order::whereRaw('id = (select max(`id`) from orders)')->get();

当然,这需要你有一个扩展Eloquent的模型。

 class Order extends Eloquent {}

如注释中所述,您不需要使用 ,您可以使用查询生成器执行整个查询,而无需原始 SQL。whereRaw

 // Using the Query Builder
 \DB::table('orders')->find(\DB::table('orders')->max('id'));

 // Using Eloquent
 $order = Order::find(\DB::table('orders')->max('id'));

(请注意,如果该字段不唯一,则只会返回一行 - 这是因为只会从 SQL 服务器返回第一个结果。idfind()


答案 2

就像文档说的那样

DB::table('orders')->max('id');

推荐