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)'));
それを改善するためのアイデアはありますか?
次のように、サブクエリでmax(id
)を見つけるために生のWHEREを使用して、ordersテーブルでselectを実行できるはずです。
_ \DB::table('orders')->where('id', \DB::raw("(select max(`id`) from orders)"))->get();
_
Eloquentを使用する場合(たとえば、応答をオブジェクトに変換できる場合)、whereRawを使用します。これは、toJSON
やtoArray
などの一部の関数は使用しないと機能しないためです。雄弁なモデル。
_ $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から最初の結果のみを返すためです。サーバ。)。
docs say のように
DB::table('orders')->max('id');
Laravel ^ 5
Orders::max('id');
私が使用したのは短くて最高です。
サブクエリを使用する必要はありません、これを試してください、それはうまく機能しています:
DB::table('orders')->orderBy('id', 'desc')->first();
オブジェクトの場合、クエリをネストできます。
DB::table('orders')->find(DB::table('orders')->max('id'));
したがって、内部クエリはテーブル内の最大IDを検索し、それをfindに渡します。これにより、オブジェクトが返されます。
Laravel Documentation に基づいて、以下が機能するはずです:
クエリを作成した後、max
メソッドを呼び出すことができます:DB::table('orders')->max('id');