Как это сделать в 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'));
Таким образом, внутренний запрос просматривает максимальный идентификатор в таблице, а затем передает его поиску, который возвращает вас обратно.