テーブルに挿入された最後のファイルを取得したいと思います。メソッドfirst()
が存在し、テーブルの最初のファイルを提供することは知っていますが、最後の挿入を取得する方法がわかりません。
19 に答える
今までと同じフィールドで並べ替える必要がありますが、降順です。例として、アップロードが完了したときのタイム スタンプが である場合、次のupload_time
ようにします。
Laravel 4以前の場合
return DB::table('files')->order_by('upload_time', 'desc')->first();
Laravel 4 以降の場合
return DB::table('files')->orderBy('upload_time', 'desc')->first();
Laravel 5.7 以降の場合
return DB::table('files')->latest('upload_time')->first();
これにより、ファイル テーブル内の行がアップロード時間の降順で並べられ、最初の行が取得されます。これが最後にアップロードされたファイルになります。
LaravelのデフォルトORMであるEloquentを使用しているかどうかについては言及していません。もしそうなら、created_at によって User テーブルの最新のエントリを取得したいとしましょう。おそらく次のようにすることができます:
User::orderBy('created_at', 'desc')->first();
最初に、created_at フィールドでユーザーを降順に並べ替え、次に結果の最初のレコードを取得します。
コレクションではなく、User オブジェクトのインスタンスが返されます。もちろん、この代替手段を利用するには、Eloquent クラスを拡張する User モデルが必要です。これは少し混乱するように聞こえるかもしれませんが、開始するのは非常に簡単で、ORM は非常に役立ちます。
詳細については、非常に豊富で詳細な公式ドキュメントを確認してください。
最後のレコードの詳細を取得するには
Model::all()->last();
またModel::orderBy('id', 'desc')->first();
最後のレコード ID を取得するには
Model::all()->last()->id;
またModel::orderBy('id', 'desc')->first()->id;
最後のレコードの詳細を取得するには、次のコードを使用します。
Model::where('field', 'value')->get()->last()
どういうわけか、上記のすべてがlaravel 5.3では機能しないようです。そのため、次を使用して自分の問題を解決しました。
Model::where('user_id', '=', $user_id)->orderBy('created_at', 'desc')->get();
誰かを救済できることを願っています。
次のような新しいモデルでsave
orアクションを実行するときに、Laravel 3 および 4 で挿入した実際の行を探している場合:create
$user->save();
-また-
$user = User::create(array('email' => 'example@gmail.com'));
次に、挿入されたモデル インスタンスが返され、作成したばかりのユーザーのプロファイル ページへのリダイレクトなどのさらなるアクションに使用できます。
少量のシステムで最後に挿入されたレコードを探すことは、ほぼ常に機能しますが、同時に挿入する必要がある場合は、間違ったレコードを見つけるためにクエリを実行することになります。これは、複数のテーブルを更新する必要があるトランザクション システムでは、実際に問題になる可能性があります。
テーブルに日付フィールドがある場合は、これ ( User::orderBy('created_at', 'desc')->first();
) が最適なソリューションだと思います。しかし、日付フィールドはありません。これModel ::orderBy('id', 'desc')->first()->id;
が最善の解決策です。