Hemen hemen her modern web uygulaması veritabanları ile ilişki halindedir. Laravel aşağıdaki öellikleri kullanarak veritabanı ile iletişime girer.
raw SQL: Laravel içerisinde sql sorguları yapmak için kullanılır.
Fluent Query Builder: Laravelin kendi query fonksiyonlarını kullanarak kısa yoldan çok kolay bir şekilde sorgu yapmamıza olanak sağlar.
Eloquent ORM: veritabanızla çalışmanızı sağlayan kullanışlı ve basit ActiveRecord uygulamasıdır.
Laravel Veritabanı Yapılandırma / Ayarlama
Laravelde veritabanı yapılandırma işlemleri config klasöründeki database.php dosyasında yapılmaktadır. Bu dosyada tüm veritabanı ayarlarınızı yapabilir, varsayılan veritabanını seçebilirsiniz. Buradaki değişkenlerin tamamı projemizin ana dizininde bulunan .env dosyasından yönetilebilir.
Laravel SQL Sorgularını Çalıştırma
Veritabanı bağlantılarınızı yaptıktan sonra DB sınıfını kullanarak veritabanı srogularımızı çalıştırabiliriz.
DB sınıfı her türlü sorgu için metotlar içerir. Insert, select,update, join vs vs.
Laravel Select Sorgusu Çalıştırma / Select Kullanımı
Herhangi bir select sorgusunu çalıştırmak için önce controller dosyamıza ya da sorguyu nerede yapacaksak oraya DB sınıfını eklememiz gerekiyor. Aşağıdaki örneği inceleyelim
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; //DB sınıfımızı dahil ettik class UserController extends Controller { public function index() { $users = DB::select('select * from users where active = ?', [1]); return view('user.index', ['users' => $users]); } }
Select metodu 2 parametre alır. Birincisi sorgu cümleciğimiz, ikinci parametre ise sorguda ? yani soru işareti ile belirttiğimiz koşulların alacağı değerdir.
Tipik olarak 2. parametre where yan cümleciğinin alacağı değerdir. Parameter binding yani parametre bağlama özelliği sql injection saldırılarına karşı koruma sağlar.
Select metodu her zaman sonuç olarak bir dizi döndürür. Dizi içerisindeki sonuç veritabanından alınana değerlerdir.
use Illuminate\Support\Facades\DB; $users = DB::select('select * from users'); foreach ($users as $user) { echo $user->name; }
Yukarıdaki kod parçacığında veritabanındaki user tablosundan tüm kayıtları çekmek için kullanılır. KAyıtlar bize bir dizi döndürdüğü için içerisindeki değerlere ulaşmak için foreach döngüsünü kullanırız.
$user->name satırındaki name veritabanındaki bir sütun adıdır.
Laravel Name Binding
Sorgulara parametre gönderirken ? kullanmak yerine name binding olayını da kullanabilirsiniz.
$results = DB::select('select * from users where id = :id', ['id' => 1]);
Laravel Insert Komutu Çalıştırma
Laravel ile veritabanına veri eklemek için DB sınıfının içerisinde bulunan insert metodunu kullanabilirsiniz. Insert metodu da 2 parametre alır. Birinci parametre ql sorgumuz ikinci parametre ise eklenmesini istediğimiz değerlerdir.
use Illuminate\Support\Facades\DB; DB::insert('insert into users (id, name) values (?, ?)', [1, 'bilisim34']);
Laravel Update Komutu Çalıştırma
Veritabanında var olan kayıtları güncellemek için DB sınıfı içerisinde bulunan update metodunu kullanabiliriz. Update metodu 2 parametre alır.
use Illuminate\Support\Facades\DB; $affected = DB::update( 'update users set id = 100 where name = ?', ['bilisim34'] );
Laravel Veri Silme / Delete Komutu Çalıştırma
Laravelde Veri silmek için Delete metodunu kullanabiliriz.
use Illuminate\Support\Facades\DB; $deleted = DB::delete('delete from users');
Genel Bir SQL Komutu Çalıştırmak
statement metodu içerisine sql sorgularımızı yazıp çalıştırabiliriz.
DB::statement('drop table users');
Birden Çok Veritabanı Bağlantısı Kullanma
Uygulamanız config/database.php yapılandırma dosyanızda birden çok bağlantı tanımlıyorsa, her bağlantıya DB sınıfı tarafından sağlanan connection metodu ile erişebilirsiniz.
Bağlantı yöntemine iletilen bağlantı adı, config/database.php yapılandırma dosyanızda listelenen veya çalışma zamanında yapılandırma yardımcısı kullanılarak yapılandırılan bağlantılardan birine karşılık gelmelidir.
use Illuminate\Support\Facades\DB; $users = DB::connection('sqlite')->select(...);
Laravel Veritabanı Transaction İşlemi
Veritabanında transaction çalıştırmak için DB sınıfı içerisinde bulunan Transaction metodunu kullanırız. İşlem sırasında exception oluşursa işlem geri alınır. Eğer bir sorun oluşmazsa işlem başarılı bir şekilde gerçekleşecektir.
use Illuminate\Support\Facades\DB; DB::transaction(function () { DB::update('update users set votes = 1'); DB::delete('delete from posts'); });
Deadlock Kullanımı
Transaction yöntemi, bir kilitlenme oluştuğunda bir transaction işleminin kaç kez yeniden denenmesi gerektiğini tanımlayan isteğe bağlı ikinci bir bağımsız değişkeni kabul eder. Yeniden deneme işlemleri bittiğinde hala sonuca ulaşamazsa bir exception çalıştırılır. 2. parametrede işlem sayısını belirtiriz.
use Illuminate\Support\Facades\DB; DB::transaction(function () { DB::update('update users set votes = 1'); DB::delete('delete from posts'); }, 5);
Manuel Transaction Kullanımı
Transaction işlemini kendimiz başlatmak istersek DB sınıfı içerisinde bulunan startupTranscation metodunu kullanırız.
use Illuminate\Support\Facades\DB; DB::beginTransaction();
Transaction kullanmayı kesmek istiyorsak rollback metodunu kullanabiliriz.
DB::rollBack();
Transaction içindeki tüm sorguları işlemek, transaction durumunu sona erdirmek. transaction tamamlanana kadar etkilenirse işlem yapmamak için commit metodunu kullanırız.
DB::commit();