Veritabanı Kütüphanesi (Bölüm 2)
"Devtools projesi ile framework kullanma deneyiminizi daha görsel hale getirebilirsiniz."
(ZN >= 1.0.0)
Database kütüphanesi 2. bölüm.
# Yöntemler
# InnerJoin (ZN >= 3.0.0)
Tablolar arasında SQL INNER JOIN deyimi ile birleştirme yapmak için kullanılır. 1. Parametre birleştirilecek diğer tablo adını ve kolon bilgisini içermelidir.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
String | $tableColumn | Tek kullanım için get() yöntemine yazılan tablo ve kolon bilgisi olmalıdır. Çoklu kullanımda farklı tablo ve kolon bilgisi olabilir. |
Return | This |
Birleştirme işlemine konu olmuş tablolar ile hangi işlemlerin yapıldığı aşağıda örneklendirilmiştir.
DB::innerJoin('comments.user_id', 'profiles.user_id')
->innerJoin('profiles.user_id', 'users.id')
->users();
FROM users
INNER JOIN comments ON comments.user_id = profiles.user_id
INNER JOIN profiles ON profiles.user_id = users.id
Inner Join ile update işlemi
DB::where('table1.id', 20)->innerJoin('table2.user_id', 'table1.id')->update('table1',
[
'table1.name' => 'Example Name',
'table2.phone' => '0000000000'
]);
INNER JOIN table2 ON table2.user_id = table1.id
SET table1.name='Example Name',table2.phone='0000000000'
WHERE table1.id = 20
Inner Join ile delete işlemi
DB::where('table1.id', 20)->innerJoin('table2.user_id', 'table1.id')->delete('table1');
INNER JOIN table2 ON table2.user_id = table1.id
WHERE table1.id = 20
# OuterJoin (ZN >= 3.0.0)
Tablolar arasında SQL FULL OUTER JOIN deyimi ile birleştirme yapmak için kullanılır. 1. Parametre birleştirilecek diğer tablo adını ve kolon bilgisini içermelidir.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
String | $tableColumn | Tek kullanım için get() yöntemine yazılan tablo ve kolon bilgisi olmalıdır. Çoklu kullanımda farklı tablo ve kolon bilgisi olabilir. |
Return | This |
DB::outerJoin('comments.user_id', 'profiles.user_id')
->outerJoin('profiles.user_id', 'users.id')
->users();
SELECT *
FROM users
FULL OUTER JOIN comments ON comments.user_id = profiles.user_id
FULL OUTER JOIN profiles ON profiles.user_id = users.id
# LeftJoin (ZN >= 3.0.0)
Tablolar arasında SQL LEFT JOIN deyimi ile birleştirme yapmak için kullanılır. 1. Parametre birleştirilecek diğer tablo adını ve kolon bilgisini içermelidir.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
String | $tableColumn | Tek kullanım için get() yöntemine yazılan tablo ve kolon bilgisi olmalıdır. Çoklu kullanımda farklı tablo ve kolon bilgisi olabilir. |
Return | This |
DB::leftJoin('comments.user_id', 'profiles.user_id')
->leftJoin('profiles.user_id', 'users.id')
->users();
SELECT *
FROM users
LEFT JOIN comments ON comments.user_id = profiles.user_id
LEFT JOIN profiles ON profiles.user_id = users.id
# RightJoin (ZN >= 3.0.0)
Tablolar arasında SQL RIGHT JOIN deyimi ile birleştirme yapmak için kullanılır. 1. Parametre birleştirilecek diğer tablo adını ve kolon bilgisini içermelidir.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
String | $tableColumn | Tek kullanım için get() yöntemine yazılan tablo ve kolon bilgisi olmalıdır. Çoklu kullanımda farklı tablo ve kolon bilgisi olabilir. |
Return | This |
DB::rightJoin('comments.user_id', 'profiles.user_id')
->rightJoin('profiles.user_id', 'users.id')
->users();
SELECT *
FROM users
RIGHT JOIN comments ON comments.user_id = profiles.user_id
RIGHT JOIN profiles ON profiles.user_id = users.id
# Union (ZN >= 4.3.3)
Tablolar arasında SQL UNION deyimi ile birleştirme yapmak için kullanılır.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
Return | This |
$users = DB::select('id', 'name')->union('example')->select('id', 'phone')->users();
output($users->stringQuery());
output($users->result());
0 => object
(
id => string '2' ( length = 3 )
name => string 'Example' ( length = 9 )
)
1 => object
(
id => string '3' ( length = 3 )
name => string 'Test' ( length = 5 )
)
2 => object
(
id => string '1' ( length = 3 )
name => string '55332587488' ( length = 7 )
)
3 => object
(
id => string '2' ( length = 3 )
name => string '88996544878' ( length = 4 )
)
# UnionAll (ZN >= 4.3.3)
Tablolar arasında SQL UNION ALL deyimi ile birleştirme yapmak için kullanılır.
String | $joinTableColumn | Birleştirilecek tablo ve kolon bilgisi. |
Return | This |
$users = DB::select('id', 'name')->unionAll('example')->select('id', 'phone')->users();
output($users->stringQuery());
output($users->result());
0 => object
(
id => string '2' ( length = 3 )
name => string 'Example' ( length = 9 )
)
1 => object
(
id => string '3' ( length = 3 )
name => string 'Test' ( length = 5 )
)
2 => object
(
id => string '1' ( length = 3 )
name => string '55332587488' ( length = 7 )
)
3 => object
(
id => string '2' ( length = 3 )
name => string '88996544878' ( length = 4 )
)
# TransStart (ZN >= 2.0.0)
Transaction sorgular birden fazla sorguyu sırayla çalıştırıp sorgulardan birinde sorun olması durumunda çalışan önceki sorguları iptal eden yapılardır. Yani bu tür sorguya konu olan tüm sorguların başarılı bir şekilde çalışması gerekir. Bu durum tüm sorguların düzgün çalışıp çalışmadığı ile ilgili sorunları ortadan kaldırır. Sorguya başlarken transStart() yöntemi kullanılır. Transaction sorgular MYSQL yerine daha çok MYISAM, InnoDB veya BDB tablo türlerinde çalışır. Çoğu veritabanı platformları transaction sorgu işlemlerini destekler.
Void | ||
Return | This |
DB::transStart()
->transQuery('...queries...')
->transQuery('...queries...')
->transEnd();
Şeklinde kullanabilirsiniz.
# TransQuery (ZN >= 4.3.3)
Transaction sorguların çalıştırılacağı yöntemdir.
String | $query | Çalıştırılacak SQL sorgusu. |
Return | This |
DB::transStart()
->transQuery('...queries...')
->transQuery('...queries...')
->transEnd();
Şeklinde kullanabilirsiniz.
# TransEnd (ZN >= 2.0.0)
Başlatılan transaction sorguyu bitirir.
Void | ||
Return | Bool |
DB::transStart()
->transQuery('...queries...')
->transQuery('...queries...')
->transEnd();
# Caching (ZN >= 4.3.6)
SELECT sorgusunu ön belleklemek için kullanılır. Bu işlem ZN Framework'ün Cache:: kütüphanesi ile yapıldığından bu kütüphanenin sürücüleri kullanılabilir. cache:file sürücüsü çok verimli olmadığı için bu sürücü ile kullanımı tavsiye edilmemektedir. Çok sayıda sorgular için denenebilir.
Scalar | $time | Ön belleklenen sorgunun ne kadar süre ile saklanacağı. |
String | $cacheDriver = 'file' | Ön bellekleme sürücülerinden biri. |
Return | This |
$photos = DB::caching('1 day')->photos();
output($photos->row());
$photos = DB::caching('10 second', 'redis')->photos();
output($photos->result());
# CleanCaching (ZN >= 4.3.6)
Ön belleklenen sorguyu silmek için kullanılır. Hangi sorgunun ön belleği silinecekse o sorgu ile kullanılır.
Void | ||
Return | This |
$photos = DB::photos();
$photos->cleanCaching();
output($photos->row());
# Distinct / DistinctRow (ZN >= 1.0.4)
SQL DISTINCT deyiminin karşılığıdır. Tekrar eden verileri izole etmek için kullanılır.
Void | ||
Return | This |
DB::distinct()->select('id', 'name', 'phone')->users();
# Cset (ZN >= 3.0.0)
SQL CHARACTER SET deyiminin karşılığıdır. Bu deyim sorgu aralarında kullanılır. Özellikle CREATE komutları ile birlikte kullanılır.
String | $set | Karakter seti. |
Return | String |
echo DB::cset('utf8');
# Collate (ZN >= 3.0.0)
SQL COLLATE deyiminin karşılığıdır. Bu deyim sorgu aralarında kullanılır. Özellikle CREATE komutları ile birlikte kullanılır.
String | $set | Karakter kümesi. |
Return | String |
echo DB::collate('utf8_general_ci');
# Encoding (ZN >= 3.0.0)
Yukarıda yer alan cset() ve collate() yöntemlerinin birleştirilerek kullanımı sağlar. Parametreler ön tanımlı olarak sırası ile utf8, utf8_general_ci tanımlıdır. Bu yöntem özellike CREATE DATABASE ve CREATE TABLE deyimleri ile birlikte kullanılır.
String | $charset = 'utf8' | Karakter seti. |
String | $collate = 'utf8_general_ci' | Karakter kümesi. |
Return | String |
echo DB::encoding();
echo DB::encoding('latin5', 'latin5_turkish_ci');
Bu tip esnek kullanımların amacı farklı veritabanı platformlarından kaynaklanan uyumsuzluktur.
# EscapeString / RealEscapeString (ZN >= 3.0.0)
Bu iki yöntemde aynı işlevi üstlenir. Dizge içerisinde tırnakların başına terst bölü sembolü ekler.
String | $data | Öncelenecek dizge. |
Return | String |
DB::escapeString("Example'Data");
DB::realEscapeString("Example'Data");
# CharacterSet
(ZN >= 3.0.0)
Sadece SELECT sorguları yani get() yöntemi ile birlikte kullanılabilir.
String | $set | Karakter seti. |
Bool | $return = false | Bu değer true olarak ayarlanırsa yöntem string çıktı üretir. |
Return | Mixed |
echo DB::characterSet('utf8')->string()->users();
Sadece fonksiyonu kullanmanız yeterli o, SELECT söz diziminde olması gereken yere yerleşir.