Laravel query builder veritabanı sorguları oluşturmak ve çalıştırmak için akıllıca ve kullanışlı bir arayüz oluşturur. Uygulamamızdaki çoğu veriabanı sorgusunu çalıştırmak için kullanılır. Laravel ile kullanılabilecek tüm veritabanlarında mükemmel bir şekilde çalışır.
Laravel query builder ayrıca güvenlik açığı oluşmasını minimuma indirmek için php pdo yöntemini kullanır.
Veritabanından Tüm verileri Çekmek
Bir sorgu çalıştırmak için DB sınıfı tarafından oluşturulan table metodunu kullanabiliriz.
table metodunda tablo adını tanımladıktan sonra get metodunu ekleyerek tablodaki verilerin dizi halinde bize ulaşmasını sağlayabiliriz.
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; class UserController extends Controller { public function index(){ $users = DB::table('users')->get(); return view('user.index', ['users' => $users]); } }
get metodu her sonucu stdClass şeklinde bir diziye çevirir. Bu diziyi obje gibi kullanabiliriz. Her sutun değerine sütun adını yazarak ulaşabiliriz.
use Illuminate\Support\Facades\DB; $users = DB::table('users')->get(); foreach ($users as $user) { echo $user->name; }
Yukardaki sorgu bize users tablosundaki tüm isimlerin sırayla ekrana yazdırılmasını sağlayacaktır.
Tablodaki Tek Satır veya Tek Sütun Değerini Alma (first Metodu Kullanımı)
Bazı durumlarda tablodan tek bir veri satırlık veri almak isteyebiliriz. Bu genellikle kullanıcı girişi işlemleri gibi işlemlerde kullanılır. first metodu burada işimize yarıyor.
$user = DB::table('users')->where('name', 'John')->first(); return $user->email;
Eğer çekeceğimizverinin tek bir sütununa ulaşmak istiyorsak first yerine value metodunu kullanabiliriz. Böylelikle o sütuna ait bir değer ortaya çıkar ve o değeri direkt olarak alabiliriz.
$email = DB::table('users')->where('name', 'John')->value('email');
Tek bir satırı id değerine göre almak için ise find metodunu kullanabiliriz.
$user = DB::table('users')->find(3);
pluck Metodu Kullanımı
Laravelde mesela x id değerine sahip sütunun y değerini almak için pluck metodu kullanılır. Bir nevi ayıklama metodu da diyebiliriz. Aşağıdaki örneği inceleyince kafanızda tam oturacaktır.
public function index(){ $names = Users::pluck('name', 'id'); dd($names); }
Çıktı :
array:4 [ 1 => "ali" //değerler anonim olarak yazılmıştır. 2 => "Seda" 3 => "Sude" ]
Chunking (Parçalama) Sonuçları
Veritabanından binlerce satırlık veri çekmemiz gerekebilir. Bunun için chunking yığın yöntemi işimizi acayip derecede kolaylaştıracaktır.
Bu işlem here seferde küçük bir yıüın alır ve bu yığını üst üste ekler. MEsela users tablosundan bir seferde 100 kayıttan oluşan veriyi parçalar halinde alalım.
use Illuminate\Support\Facades\DB; DB::table('users')->orderBy('id')->chunk(100, function ($users) { foreach ($users as $user) { // } });
Metodda işlemden sonra return false değerini verirsek daha fazla işlem yapmasını engelleyebiliriz. Bu mesela arama işlemi yaparken bir sonuca ulaştığımızda veritabanına daha fazla sorgu gönderilmesini engellemek için kullanılabilir.
DB::table('users')->orderBy('id')->chunk(100, function ($users) { //işlemlerreturn false; });
lazy Metodunun Kullanımı
lazy metodu sorguyu yığınlar halinde çalıştırmasından dolay chunk metoduna benzer. Chunk metodundan farkı ise callback fonksiyon kullanmak yerine lazyCollection döndürmesidir.
use Illuminate\Support\Facades\DB; DB::table('users')->lazy()->each(function ($user) { // });
Bir kez daha, alınan kayıtları yinelerken güncellemeyi planlıyorsanız, bunun yerine lazyById yöntemini kullanmak en iyisidir. Bu yöntem, kaydın birincil anahtarına göre sonuçları otomatik olarak sayfalandırır:
DB::table('users')->where('active', false) ->lazyById()->each(function ($user) { DB::table('users') ->where('id', $user->id) ->update(['active' => true]); });