- Yapılandırma
- Okuma / Yazma Bağlantıları
- Sorguları Çalıştırma
- Veritabanı İşlemleri
- Bağlantılara Erişme
- Sorgu Günlükleme
Laravel, veritabanı bağlantısını ve sorguları çalıştırmayı fazlasıyla kolay kılar. Veritabanı yapılandırma ayarları app/config/database.php dosyasında bulunmaktadır. Bu dosyada hem tüm veritabanı bağlantılarını tanımlayabilir, hem de hangi bağlantının varsayılan olarak kullanılacağını seçebilirsiniz. Bu dosyada, desteklenen veritabanı sistemlerinin tümü için örnekler verilmiştir.
Laravel tarafından desteklenen veritabanı sistemleri: MySQL, Postgres, SQLite, ve SQL Server.
Bazen SELECT sorguları için bir bağlantı ve diğer sorgular için başka bir bağlantı kullanmak isteyebilirsiniz. Laravel bunu inanılmaz bir şekilde kolaylaştırır ve ister düz sorgu, ister sorgu oluşturucu (query builder) veya ister Eloquent ORM kullansanız bile hepsi için doğru bağlantıyı kullanır.
Okuma / yazma bağlantılarının nasıl yapılandırıldığını görmek için bu örneği inceleyebilirsiniz:
'mysql' => array(
'read' => array(
'host' => '192.168.1.1',
),
'write' => array(
'host' => '196.168.1.2'
),
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
Yapılandırma dizisine eklenen iki anahtara dikkat edin: read ve write. İkisi de sadece host anahtarını barındıran bir dizi. read ve write bağlantılarının geri kalan tüm veritabanı seçenekleri ise ana mysql dizisinden alınıp birleştirilecektir. Yani read ve write dizilerine sadece ana dizideki değerlerden değiştirmek istediğimiz kalemleri girmemiz gereklidir. Bu durumda read bağlantısı olarak 192.168.1.1 kullanılırken, write bağlantısı olarak 192.168.1.2 kullanılacaktır. Ana mysql dizisindeki username, password, prefix, character set ve diğer tüm seçenekler her iki bağlantı için paylaşılacaktır.
Veritabanı bağlantılarını bir kere yapılandırdıktan sonra DB sınıfını kullanarak sorguları çalıştırabilirsiniz.
$results = DB::select('select * from users where id = ?', [1]);
The select method will always return an array of results.
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);
DB::update('update users set votes = 100 where name = ?', ['John']);
DB::delete('delete from users');
Note:
updatevedeletesorguları, bu işlemlerden etkilenen satır sayısını döndürür.
DB::statement('drop table users');
DB::listen metodunu kullanarak sorgu olaylarını dinleyebilirsiniz:
DB::listen(function($sql, $bindings, $time)
{
//
});
Bir veritabanı işleminde, birden fazla işlemi birden gerçekleştirmek için, transaction metodunu kullanabilirsiniz:
DB::transaction(function()
{
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
Note:
transactionmetoduna girilen anonim fonksiyonunda oluşan herhangi bir istisna, transaction işleminin otomatik olarak geri sarılmasına (rollback edilmesine) sebep olur.
Transaction'ı elle başlatmanız gerekirse:
DB::beginTransaction();
Transaction'ı geri sarmanız gerekirse:
DB::rollback();
Transaction'ı tamamlamak için:
DB::commit();
Birden fazla bağlantı kullandığınız durumlarda, bu bağlantılara DB::connection metodu aracılığı ile ulaşabilirsiniz.
$users = DB::connection('foo')->select(...);
Ayrıca temel PDO örneğine de ulaşabilirsiniz:
$pdo = DB::connection()->getPdo();
Bazen veritabanına tekrar bağlanmaya ihtiyacınız olabilir.
DB::reconnect('foo');
Veritabanıyla, PDO nesnesinin max_connections limiti aşıldığı için bağlantıyı koparmanız gerekirse disconnect metodunu kullanabilirsiniz:
DB::disconnect('foo');
Varsayılan olarak, Laravel güncel istek için çalıştırılabilecek tüm sorgular için bellekte bir günlük tutar. Bununla birlikte, bu bazı durumlarda, örneğin çok sayıda satır eklerken, uygulamanın aşırı bellek kullanmasına neden olabilir. Günlüğü devre dışı bırakmak için disableQueryLog metodunu kullanabilirsiniz.
DB::connection()->disableQueryLog();
Çalıştırılan sorguların listesini bir dizi olarak almak için getQueryLog metodunu kullanabilirsiniz:
$queries = DB::getQueryLog();