Laravel Query Builder, где max id

Как это сделать в 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)'));

Любая идея сделать это лучше?

Ответы

Ответ 1

Вы должны быть в состоянии выполнить выборку в таблице заказов, используя необработанный WHERE для поиска максимального (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.).

Ответ 3

Не нужно использовать дополнительный запрос, просто попробуйте это, его работоспособность:

  DB::table('orders')->orderBy('id', 'desc')->first();

Ответ 4

Для Laravel ^ 5

Orders::max('id');

Я использовал его короткий и лучший;

Ответ 5

Для объектов вы можете вложить запросы:

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

Таким образом, внутренний запрос просматривает максимальный идентификатор в таблице, а затем передает его поиску, который возвращает вас обратно.