テーブルに挿入された最後のファイルを取得したいのですが。メソッドfirst()
が存在し、テーブルの最初のファイルが提供されることは知っていますが、最後の挿入を取得する方法がわかりません。
テーブルに挿入された最後のファイルを取得したいのですが。メソッドfirst()
が存在し、テーブルの最初のファイルが提供されることは知っていますが、最後の挿入を取得する方法がわかりません。
回答:
今までに注文したのと同じフィールドで注文する必要がありますが、降順です。例として、アップロードが完了したときにタイムスタンプが呼び出されたupload_time
場合は、次のようにします。
Pre-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();
これにより、filesテーブルの行がアップロード時間の降順で並べられ、最初の行が取得されます。これが最新のアップロードファイルになります。
orderBy
、これはではなく、order_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
日付順は文字列であり、ほとんどの場合インデックス化されていないため、より長く機能します。主キーにはインデックスが付けられ、超高速で動作します。created_atがインデックス化されている場合でも、プライマリの場合はINTではなく、インデックス化された文字列です。インデックス文字列はパフォーマンスが低下します。
orderBy('created_at', 'desc')
です。最終行が得られない場合があるからです。例:3つの行のTIMESTAMP値はまったく同じorderBy('created_at', 'desc')
で、3つ目の最初の行(最後の行とは限りません)を取得できます
Laravelが提供する最新のスコープをそのまま使用します。
Model::latest()->first();
そうすれば、すべてのレコードを取得することにはなりません。orderByへのより良いショートカット。
created_at
列を使用し($timestamps = true)
ますが、必要に応じて無効にできるため、未定義の場合はエラーが発生することに注意してください
LaravelのデフォルトのORMであるEloquentを使用しているかどうかについては言及していません。もしそうなら、created_atでUserテーブルの最新のエントリを取得したいとしましょう。おそらく次のようにすることができます:
User::orderBy('created_at', 'desc')->first();
最初に、created_atフィールドでユーザーを降順に並べ替え、次に結果の最初のレコードを取得します。
これは、コレクションではなく、Userオブジェクトのインスタンスを返します。もちろん、この代替手段を利用するには、Eloquentクラスを拡張するUserモデルが必要です。これは少し混乱するように聞こえるかもしれませんが、始めるのは本当に簡単で、ORMは非常に役立ちます。
詳細については、かなりリッチで詳細な公式ドキュメントをご覧ください。
Laravelコレクションには最後のメソッドがあります
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
これはそれを行うための最良の方法です。
all()
メソッドが実際にすべてのアイテムをロードすることを指摘したかっただけです。これは、数百万のレコードがあるテーブルでは機能しません。
last()
はコレクションではなく単一のEloquentインスタンスを返し、それpluck()
を呼び出すことはを呼び出すことと同じModel::all()->pluck('name')
であるため、テーブル内name
のすべての行の属性を返すことを指摘したいと思います
これを試して :
Model::latest()->get();
Laravelが提供する最新のスコープを、フィルタリングするフィールドで使用できます。たとえば、IDで並べ替えるとします。
Model::latest('id')->first();
したがって、このようにして、created_at
Laravelではデフォルトでフィールドによる順序付けを回避できます。
Laravel 6.xでこれを行うもう1つの豪華な方法(不明ですが、5.xでも機能する必要があります):
DB::table('your_table')->get()->last();
フィールドにもアクセスできます。
DB::table('your_table')->get()->last()->id;
get()
メソッドはすべてをフェッチしてyour_table
コレクションを生成し、last()
メソッドはそのコレクションから最後のアイテムを取得します。だからあなたはすでにあなたのメモリにロードされたテーブルからのすべてのデータを持っているでしょう(悪い)。`DB :: table( 'items')-> latest()-> first();`を使用して、 `orderBy($ column、 'desc')`を実行し、最初のレコードをフェッチするだけです。
次のような新しいモデルでsave
またはcreate
アクションを実行するときに、Laravel 3および4で挿入した実際の行を探している場合:
$user->save();
-または-
$user = User::create(array('email' => 'example@gmail.com'));
その後、挿入されたモデルインスタンスが返され、作成したばかりのユーザーのプロファイルページにリダイレクトするなどのアクションに使用できます。
少量のシステムで最後に挿入されたレコードの検索はほとんどの場合機能しますが、挿入を同時に行う必要がある場合は、クエリを実行して間違ったレコードを見つけることができます。これは、複数のテーブルを更新する必要があるトランザクションシステムで本当に問題になる可能性があります。