Eloquent ORM Kütüphanesinde get() ve first() Farkları

Özet

get() metodu sorguyu çalıştırır ve bir Collection döner yani içerisinde sorgu sonucunda kaç satır veri varsa hepsini getirir, first() ise get() gibi sorguyu çalıştırır ve sadece ilk satırı Model ya da stdClass tipinde bir nesne olarak döner.

Bir ORM olan Eloquent sayesinde veritabanımızdaki tablolar ile PHP sınıflarımızı rahatlıkla eşleştirip kullanabiliyoruz. Metodları zincirleyerek oluşturduğumuz sorguların sonucunu getirmesi için kullanılan iki metodun get() ve first() arasındaki farkı açıklamaya çalışacağım.

// Örneğin bu şekilde adında er olan kullanıcıları çağırıyoruz
$user = DB::table('users')->where('name', 'LIKE', '%er%')->get();
// object(Illuminate\Support\Collection)

// Laravelden alıştığımız model ile kullanımda bu şekilde 
$user = User::where('name', 'LIKE', '%er%')->get();
// object(Illuminate\Database\Eloquent\Collection)

Yukarıdaki iki satır da benzer bir Collection nesnesi dönecektir fakat içerisindeki nesne türleri ilk satırda stdClass diğerinde ise User modeli olacaktır.

Zinciri tamamladığımız get metodu sorgumuzu hazırlayıp çalıştırdı. Burada sık ihtiyaç duyulan sorgu sonucunda gelen veri sayısını limitlemeyi de görelim.

$user = DB::table('users')->where('name', 'LIKE', '%er%')->take(1)->get();
// object(Illuminate\Support\Collection)

// Laravelden alıştığımız model ile kullanımda bu şekilde 
$user = User::where('name', 'LIKE', '%er%')->take(1)->get();
// object(Illuminate\Database\Eloquent\Collection)

Yine bir Eloquent metodu olan take() bize yardım ediyor ve istediğimiz kadar satır veriyi çekmemizi sağlıyor. Ama dönen sonuç tip olarak yine Collection olduğundan tek satır veri çekmek istediğimiz durumlarda bu Collection’ın ilk elemanını almamız gerekiyor.

first()

Burada first metodu kullanarak tek bir veri çekilecek durumlarda direkt bize model ya da stdClass nesnesi dönmesini sağlayabiliyoruz.

// Örneğin bu şekilde adında er olan kullanıcıları çağırıyoruz
$user = DB::table('users')->where('name', 'LIKE', '%er%')->take(1)->get();
// object(Illuminate\Support\Collection)

// Laravelden alıştığımız model ile kullanımda bu şekilde 
$user = User::where('name', 'LIKE', '%er%')->take(1)->get();
// object(Illuminate\Database\Eloquent\Collection)

Yukarıda oluşacak olan $user nesnesini beklediğimiz veriye denk geldiğini bilerek direkt kullanabiliriz.

Sayfalama, listeleme, raporlama gibi pek çok elemanın çekileceği durumlar için get() yeterli olabilir fakat bir sıralama yapıp ilk elemanı almak istediğimiz, son üyeyi getirme, ilk yorumu getirme gibi durumlarda first() bizim için daha uygun olacaktır.


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir