テーブルに最後に挿入されたファイルを取得したいのですが。メソッドfirst()
が存在し、テーブルの最初のファイルを提供することは知っていますが、最後の挿入を取得する方法がわかりません。
今注文しているのと同じフィールドで、降順に注文する必要があります。例として、アップロードが完了したときにupload_time
というタイムスタンプがある場合は、次のようにします。
プレラレベル4用
return DB::table('files')->order_by('upload_time', 'desc')->first();
Laravel 4以降
return DB::table('files')->orderBy('upload_time', 'desc')->first();
これは、ファイルテーブルの行をアップロード時間の降順で並べ替え、最初のものを取ります。これが最新のアップロードファイルになります。
LaravelのデフォルトのORMであるEloquentを使っているかどうかについては、あなたは一度も言及しませんでした。もしそうであれば、created_atによってUserテーブルの最新のエントリを取得したいとしましょう。おそらく以下のようにすることができます。
User::orderBy('created_at', 'desc')->first();
最初に、created_atフィールドでユーザーを降順に並べ替え、次に結果の最初のレコードを取得します。
コレクションではなく、Userオブジェクトのインスタンスが返されます。もちろん、この代替手段を利用するには、Eloquentクラスを拡張したUserモデルが必要です。これは少しわかりにくいかもしれませんが、始めるのは本当に簡単で、ORMは本当に役に立ちます。
詳細については、かなり豊富で詳細な 公式文書 を調べてください。
出荷時の状態でLaravelで提供されている最新のスコープを使用してください。
Model::latest()->first();
そうすれば、すべてのレコードを取得することはできません。 orderByへのより良い近道。
最後のレコードの詳細を取得する
Model ::all()->last();
またはModel ::orderBy('id', 'desc')->first();
最後のレコードIDを取得する
Model::all()->last()->id;
またはModel ::orderBy('id', 'desc')->first()->id;
Laravelコレクションにはメソッドlastがあります
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
これが最善の方法です。
これを試して :
Model::latest()->get();
最後のレコードの詳細を取得するには、以下のコードを使用してください。
Model::where('field', 'value')->get()->last()
どういうわけか、上のすべてがlaravel 5.3で私のために働かないようであるので、私は私自身の問題を使って解決しました:
Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();
誰かを救済できることを願っています。
以下のような新しいモデルでsave
またはcreate
アクションを実行するときに、Laravel 3および4で挿入した実際の行を探しているとします。
$user->save();
- または -
$user = User::create(array('email' => '[email protected]'));
その後、挿入されたモデルインスタンスが返され、作成したばかりのユーザーのプロフィールページにリダイレクトするなどのさらなるアクションに使用できます。
最後に挿入されたレコードを探しても、ほとんどの場合はうまくいきますが、同時に挿入しなければならない場合は、間違ったレコードを見つけるためにクエリを実行することになります。複数のテーブルを更新する必要があるトランザクションシステムでは、これが本当に問題になる可能性があります。
テーブルに日付フィールドがある場合、これ(User::orderBy('created_at', 'desc')->first();
)が最善の解決策です、と私は思います。しかし、日付フィールドはなく、Model ::orderBy('id', 'desc')->first()->id;
が最善の解決策です、と私は確信しています。