web-dev-qa-db-ja.com

Laravel最大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)'));

それを改善するためのアイデアはありますか?

36
Shiro

次のように、サブクエリでmax(id)を見つけるために生のWHEREを使用して、ordersテーブルでselectを実行できるはずです。

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

Eloquentを使用する場合(たとえば、応答をオブジェクトに変換できる場合)、whereRawを使用します。これは、toJSONtoArrayなどの一部の関数は使用しないと機能しないためです。雄弁なモデル。

_ $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フィールドが一意でない場合、1行しか戻らない-これは、find()がSQLから最初の結果のみを返すためです。サーバ。)。

47
Tim Groeneveld

docs say のように

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

Laravel ^ 5

Orders::max('id');

私が使用したのは短くて最高です。

17
Afraz Ahmad

サブクエリを使用する必要はありません、これを試してください、それはうまく機能しています:

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

オブジェクトの場合、クエリをネストできます。

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

したがって、内部クエリはテーブル内の最大IDを検索し、それをfindに渡します。これにより、オブジェクトが返されます。

4
tristanbailey

Laravel Documentation に基づいて、以下が機能するはずです:

クエリを作成した後、maxメソッドを呼び出すことができます:DB::table('orders')->max('id');

0
Udhav Sarvaiya