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)')); 

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

Вы должны иметь возможность выполнить выбор в таблице заказов, используя необработанное WHERE, чтобы найти max ( id ) в подзапросе, например:

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

Если вы хотите использовать Eloquent (например, чтобы вы могли преобразовать свой ответ на объект), вы захотите использовать whereRaw, потому что некоторые функции, такие как toJSON или toArray , не будут работать без использования моделей Eloquent.

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

Это, конечно, требует, чтобы у вас была модель, которая расширяет Eloquent.

  class Orders extends Eloquent {} 

Как уже упоминалось в комментариях, вам не нужно использовать whereRaw , вы можете выполнить весь запрос, используя построитель запросов без необработанного SQL.

  // Using the Query Builder DB::table('orders')->find(DB::table('orders')->max('id')); // Using Eloquent $order = Orders::find(DB::table('orders')->max('id')); 

(Обратите внимание: если поле id не является уникальным, вы получите только одну строку – это потому, что find() возвращает только первый результат с SQL-сервера.).

Как говорят документы

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

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

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

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

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

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

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