Find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray () arasındaki fark nedir


109

Bu yöntemler arasındaki fark nedir:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

Bunları kullanıyorum ve her biri farklı bir sonuç veriyor ve bazen fonksiyonum bir dizi beklediği toArray()için sonuna eklemem gerekiyor get(). Diğer yöntemler de dizi üretmeyecek mi?



@ Joseph Silber'daki tüm bilgiler doğru ve çok kullanışlıdır. Laravel 5.2'den list () 'e bir cevap eklemek istiyorum Koleksiyon, sorgu oluşturucu ve Eloquent sorgu oluşturucu nesnelerindeki liste yöntemi pluck olarak yeniden adlandırıldı. Yöntem imzası aynı kalır.
Nirav Bhoi

Yanıtlar:


228
  1. find($id)bir id alır ve tek bir model döndürür. Eşleşen model yoksa geri döner null.

  2. findOrFail($id)bir id alır ve tek bir model döndürür. Eşleşen model yoksa, bir hata 1 atar .

  3. first()veritabanında bulunan ilk kaydı döndürür. Eşleşen model yoksa geri döner null.

  4. firstOrFail()veritabanında bulunan ilk kaydı döndürür. Eşleşen model yoksa, 1 hatası verir .

  5. get() sorgu ile eşleşen bir model koleksiyonu döndürür.

  6. pluck($column)yalnızca verilen sütundaki değerlerin bir koleksiyonunu döndürür. Laravel'in önceki sürümlerinde bu yöntem çağrıldı lists.

  7. toArray() modeli / koleksiyonu basit bir PHP dizisine dönüştürür.


Not: Koleksiyon , güçlendirilmiş bir dizidir. Bir diziye benzer şekilde çalışır, ancak belgelerde görebileceğiniz gibi birçok ek işlevselliğe sahiptir .

Ne yazık ki, PHP bir dizi kullanabileceğiniz her yerde bir koleksiyon nesnesi kullanmanıza izin vermez. Örneğin, bir foreachdöngü içinde bir koleksiyon kullanmak sorun değil, onu geçirmek array_mapdeğil. Benzer şekilde, bir bağımsız değişkeni olarak arrayyazarsanız, PHP bir koleksiyon geçirmenize izin vermez. PHP 7.1'den başlayarak, hem dizileri hem de koleksiyonları kabul etmek için kullanılabilecek bir iterabletypehint vardır .

Bir koleksiyondan düz bir dizi elde etmek isterseniz, all()yöntemini çağırın .


1 tarafından atılan hata findOrFailve firstOrFailyöntem a, ModelNotFoundException. Bu istisnayı kendiniz yakalamazsanız, Laravel 404 ile yanıt verecektir , bu çoğu zaman istediğiniz şeydir.


1
Açıklık için teşekkürler. Mesele şu ki, buna benzer yayınların bir listesini almaya çalışıyorum $post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);böylece erişebilirim $post->subreddit->moderators->user_idama bu veriyor Undefined property: Illuminate\Database\Eloquent\Collection::$user_id- erişebiliyorum $post->subreddit->moderatorsama eklediğimde değil user_id- neden bu?
Halnex

subredditözelliği olan tek bir modeldir moderators. moderatorsbir koleksiyon, tek bir model değil. Hiçbir şeye doğrudan ondan erişemezsiniz. İsterseniz ilkini kontrol edebilirsiniz:$post->subreddit->moderators[0]->user_id
Joseph Silber

Bence "bir hata atıyor" ifadesini "ModelNotFoundException istisnası atıyor" ile değiştirmelisiniz: D Her neyse harika bir katkı;)
bobbybouwmann

@JosephSilber Mükemmel!
bobbybouwmann
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.