Tabloma eklenen son dosyayı almak istiyorum. Yöntemin first()
var olduğunu ve tablodaki ilk dosyayı sağladığını biliyorum ama son eklemeyi nasıl alacağımı bilmiyorum.
Tabloma eklenen son dosyayı almak istiyorum. Yöntemin first()
var olduğunu ve tablodaki ilk dosyayı sağladığını biliyorum ama son eklemeyi nasıl alacağımı bilmiyorum.
Yanıtlar:
Şimdiye kadar sipariş ettiğiniz aynı alana göre sipariş vermeniz gerekiyor, ancak azalan. Örnek olarak, yükleme tamamlandığında bir zaman damganız varsa, upload_time
böyle bir şey yaparsınız;
Laravel Öncesi 4 için
return DB::table('files')->order_by('upload_time', 'desc')->first();
Laravel 4 ve sonrası için
return DB::table('files')->orderBy('upload_time', 'desc')->first();
Laravel 5.7 ve sonrası için
return DB::table('files')->latest('upload_time')->first();
Bu, dosyalar tablosundaki satırları yükleme süresine, azalan sıraya göre sıralar ve birincisini alır. Bu en son yüklenen dosya olacak.
orderBy
, değilorder_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
Tarihe göre sıralama, tarih dize olduğundan ve büyük olasılıkla dizine eklenmediğinden daha uzun süre çalışır. Birincil anahtar endekslenir ve süper hızlı çalışır. Oluşturulan_at dizine alınmış olsa bile, birincil durumunda INT değil dizine eklenir. Dizin dizesi daha az performansa sahiptir.
orderBy('created_at', 'desc')
size son satırı vermez. Örnek: 3 satır tam olarak aynı TIMESTAMP değerine sahip olabilir ve orderBy('created_at', 'desc')
sizinle 3'ün ilkini alırsınız (son satır olması gerekmez)
Kutudan çıkan Laravel tarafından sağlanan en son kapsamı kullanın.
Model::latest()->first();
Bu şekilde tüm kayıtları almazsınız. OrderBy için daha hoş bir kısayol.
created_at
sütunu kullandığını ($timestamps = true)
, ancak tanımsızsa bir hataya sahip olmanızı dilediğiniz zaman devre dışı
Laravel'in varsayılan ORM'sini Eloquent kullanıp kullanmadığınızı hiç söylemediniz. Olmanız durumunda, bir User tablosunun en son girişini create_at ile almak istediğinizi varsayalım, muhtemelen aşağıdaki gibi yapabilirsiniz:
User::orderBy('created_at', 'desc')->first();
İlk olarak, kullanıcıları azalan şekilde create_at alanına göre sıralar ve ardından sonucun ilk kaydını alır.
Bu size bir koleksiyon değil, User nesnesinin bir örneğini döndürür. Tabii ki, bu alternatiften yararlanmak için Eloquent sınıfını genişleten bir Kullanıcı modeline sahip olmalısınız. Bu biraz kafa karıştırıcı gelebilir, ancak başlamak gerçekten kolaydır ve ORM gerçekten yardımcı olabilir.
Daha fazla bilgi için oldukça zengin ve ayrıntılı resmi belgelere göz atın.
Son kayıt ayrıntılarını almak için
Model::all()->last();
veyaModel::orderBy('id', 'desc')->first();
Son kayıt kimliğini almak için
Model::all()->last()->id;
veya Model::orderBy('id', 'desc')->first()->id;
Laravel koleksiyonlarında son yöntem var
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
Bunu yapmanın en iyi yolu budur.
all()
yöntemin aslında tüm öğeleri yüklediğini belirtmek istedim . Bu, milyonlarca kaydı olan bir tabloda çalışmaz.
last()
bir Koleksiyon değil tek bir Eloquent örneği döndürdüğünü ve bunun çağrılmaya pluck()
eşit olduğunu Model::all()->pluck('name')
, dolayısıyla tablodaki tüm satırların name
niteliğini
Bunu dene :
Model::latest()->get();
Laravel tarafından sağlanan en son kapsamı filtrelemek istediğiniz alanla kullanabilirsiniz, diyelim ki ID ile sipariş verilecek,
Model::latest('id')->first();
Böylece created_at
Laravel'de varsayılan olarak alana göre sipariş vermekten kaçınabilirsiniz.
Son kayıt ayrıntılarını almak için aşağıdaki kodu kullanın:
Model::where('field', 'value')->get()->last()
Laravel 6.x'te yapmanın başka bir fantezi yolu (Emin değilim, ancak 5.x için de çalışması gerekir):
DB::table('your_table')->get()->last();
Alanlara da erişebilirsiniz:
DB::table('your_table')->get()->last()->id;
get()
yöntem her şeyi alır your_table
ve bir Koleksiyon oluşturur ve last()
yöntem bu koleksiyondan son öğeyi alır. Böylece tablodaki tüm verileriniz belleğinizde yüklü olacaktır (kötü). Sadece `DB :: table ('items') -> latest () -> first ();` `sahnenin arkasında` orderBy ($ column, 'desc') `i kullanmalı ve ilk kaydı getirmelisiniz.
Laravel 3 ve 4 ile eklediğiniz asıl satırı arıyorsanız, aşağıdaki gibi yeni bir modelde save
veya create
eylem gerçekleştirirken :
$user->save();
-veya-
$user = User::create(array('email' => 'example@gmail.com'));
eklenen model örneği döndürülür ve yeni oluşturulan kullanıcının profil sayfasına yönlendirme gibi başka işlemler için kullanılabilir.
Son eklenen kayıt için düşük hacimli sistem üzerinde çalışmak neredeyse her zaman işe yarayacak, ancak ekler eklemek zorunda kalırsanız aynı anda gitmek yanlış kayıt bulmak için sorgulama sona erebilir. Bu, birden çok tablonun güncellenmesi gereken bir işlem sisteminde gerçekten bir sorun haline gelebilir.
unutmayın last()
, latest()
bir sıralı veya etkinlik / sipariş kayıt arıyorsanız deterministik değildir. Son / son kayıtlar tam olarak aynı created_at
zaman damgasına sahip olabilir ve geri aldığınız deterministik değildir. Öyleyse yap orderBy(id|foo)->first()
. Nasıl deterministik olacağına dair diğer fikir / önerilerinizi bekliyoruz.