Database Kütüphanesi
Titan Framework, veritabanı işlemleri için PHP'nin PDO kütüphanesinden türetilmiş TitanDB kütüphanesini kullanır.
- Veritabanı Bağlantısı Kurma
- Birden Çok Veritabanı ile Bağlantı Kurma
- Tek Satır Veri Çekme » getRow()
- Çoklu Veri Çekme » getAll()
- WHERE Kullanımı » where()
- WHERE Gruplama » whereGroupStart(), whereGroupEnd()
- JOIN Kullanımı » leftJoin(), rightJoin(), innerJoin(), outerJoin()
- ORDER BY ve LIMIT Kullanımı » orderBy(), limit()
- GROUP BY Kullanımı » groupBy()
- HAVING Kullanımı » having(), orHaving()
- HAVING Gruplama » havingGroupStart(), havingGroupEnd()
- LIKE ve NOT LIKE Kullanımı » like(), orLike(), notLike(), orNotLike()
- IN ve NOT IN Kullanımı » in(), orIn(), notIn(), orNotIn()
- BETWEEN Kullanımı » between(), orBetween(), notBetween(), orNotBetween()
- INSERT Kullanımı » insert()
- UPDATE Kullanımı » update()
- DELETE Kullanımı » delete()
- Son Eklenen Kayıt ID » lastInsertId()
- Kayıt Sayısını Bulma » numRows()
- Son Çalıştırılan Sorguyu Bulma » lastQuery()
- SQL Sorgusu Çalıştırma » customQuery()
Veritabanı Bağlantısı Kurma
Titan Framework üzerinde veritabanı bağlantısı kurmak için /App/Config dizininde bulunan Database.php dosyasında bağlantı ile ilgili ayarlar yapılmalıdır.
return [
'primary' => [
'db_driver' => 'mysql',
'db_host' => 'localhost',
'db_user' => '',
'db_pass' => '',
'db_name' => '',
'db_charset' => 'utf8',
'db_collation' => 'utf8_general_ci',
'db_prefix' => ''
],
];
Birden Çok Veritabanı ile Bağlantı Kurma
Yukarıda görüldüğü gibi varsayılan veritabanı bağlantısı, primary anahtarına tanımlı ayarlar ile kurulur. Dilerseniz birden fazla veritabanı üzerinde çalışmak için başka bağlantı parametreleri de ekleyebilirsiniz.
'secondary' => [
'db_driver' => 'mysql',
'db_host' => 'localhost',
'db_user' => '',
'db_pass' => '',
'db_name' => '',
'db_charset' => 'utf8',
'db_collation' => 'utf8_general_ci',
'db_prefix' => ''
],
Kullanılacak veritabanlarına ait bağlantı parametreleri tanımlandıktan sonra, sorgunun çalıştırılacağı bağlantıyı belirtmek için connection() methodu kullanılır. Bu method, model sınıflarının constructor methodlarında ya da her bir sorgu öncesinde çağrılabilir.
Constructor Method İçinde Bağlantı Seçimi
namespace App\Models;
use DB;
class Users
{
public function __construct()
{
DB::connection('primary');
}
public function getAll()
{
return DB::select('*')
->table('users')
->getAll();
}
}
Sorgu Sırasında Bağlantı Seçimi
namespace App\Models;
use DB;
class Users
{
public function getAll()
{
return DB::connection('secondary')
->select('*')
->table('users')
->getAll();
}
}
Tek Satır Veri Çekme
Veritabanındaki bir tablodan tek satır veri çekmek için getRow() methodu kullanılır. Parametre verilmediği takdirde veriyi object formatında döndürür. Array formatında almak için 'array' parametresi verilmelidir.
// Object döndürür
DB::table('tablo')->select('col_1, col_2')->getRow();
// Array döndürür
DB::table('tablo')->select('col_1, col_2')->getRow('array');
Çoklu Veri Çekme
Veritabanındaki bir tablodan birden fazla sayıda kayıt çekmek için getAll() methodu kullanılır. Parametre verilmediği takdirde veriyi object formatında döndürür. Array formatında almak için 'array' parametresi verilmelidir.
// Object döndürür
DB::table('tablo')->select('col_1, col_2')->getAll();
// İlgili kayıttaki tüm kolonları çeker
DB::table('tablo')->getAll();
// Array döndürür
DB::table('tablo')->select('col_1, col_2')->getAll('array');
WHERE Kullanımı
Bir tablodan bir ya da birden fazla koşula uygun veri ya da verileri çekmek için where(), orWhere() methodları kullanılır. Kolon adı, koşula bağlanan değer ve mantıksal operator bilgilerini parametre olarak alır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Kolon adı |
| $operator | String | Mantıksal operatör ('=', '<', '>' , '<=', '>=') |
| $value | String | Kolon değeri |
// SELECT col_1, col_2 FROM tablo WHERE id=5
DB::table('tablo')
->select('ad, soyad')
->where('id', '=', 5)
->getRow();
// SELECT col_1, col_2 FROM tablo WHERE yas>20 AND il=34
DB::table('tablo')
->select('ad, soyad')
->where('yas', '>', 20)
->where('il', '=', 34)
->getAll();
// SELECT ad, soyad FROM tablo WHERE yas>20 OR dogum_tarihi>1996
DB::table('tablo')
->select('ad, soyad')
->where('yas', '>', 20)
->or_where('dogum_tarihi', '>', 1996)
->getAll();
WHERE Gruplama
Birden fazla koşul kullanılması gereken sorgularda doğru sonuç alabilmek için koşulların gruplandırılması gerekir. Bunun için gruplandırmanın başladığı yerde whereGroupStart(), bittiği yerde de whereGroupEnd() methodları kullanılır.
Parametre olarak AND ve OR operatörlerini alabilir. Varsayılan durumda operatör AND olarak ayarlanmıştır. Oluşturulan gruptan önce başka bir koşul belirtilmiş ise, grup bu koşula parametrede belirtilen operatör ile bağlanır.
Gruptan önce herhangi bir koşul belirtilmemiş ise parametre vermeye gerek yoktur.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $operator | String | Kendisinden önceki koşula bağlanma operatörü |
// SELECT col_1, col_2 FROM tablo WHERE kosul>5 AND (kosul_2='deger_2' OR kosul_2='deger_3')
DB::table('tablo')
->select('col_1, col_2')
->where('kosul_1', '>', 5)
->whereGroupStart()
->where('kosul_2', '=', 'deger_2')
->orWhere('kosul_2', '=', 'deger_3')
->whereGroupEnd()
->getAll();
// SELECT col_1, col_2 FROM tablo WHERE kosul>5 OR (kosul_2='deger_2' OR kosul_2='deger_3')
DB::table('tablo')
->select('col_1, col_2')
->where('kosul_1', '>', 5)
->whereGroupStart('OR')
->where('kosul_2', '=', 'deger_2')
->orWhere('kosul_2', '=', 'deger_3')
->whereGroupEnd()
->getAll();
JOIN Kullanımı
Tablolar arasında birleştirme yapmak için leftJoin(), rightJoin(), innerJoin() ve outerJoin() methodları kullanılır. Birleştirilecek tablo adı ve birleştirme koşullarını parametre olarak alır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $table | String | Birleştirilecek tablo adı |
| $op | String | Birleştirme koşulu |
# leftJoin()
Tabloları LEFT JOIN deyimi ile birleştirmek için kullanılır.
// SELECT t1.username, t2.comment FROM users as t1 LEFT JOIN comments as t2 ON t1.user_id=t2.user_id
DB::table('users as t1')
->leftJoin('comments as t2', 't1.user_id=t2.user_id')
->select('t1.username, t2.comment')
->getAll();
# rightJoin()
Tabloları RIGHT JOIN deyimi ile birleştirmek için kullanılır.
// SELECT t1.username, t2.comment FROM users as t1 RIGHT JOIN comments as t2 ON t1.user_id=t2.user_id
DB::table('users as t1')
->rightJoin('comments as t2', 't1.user_id=t2.user_id')
->select('t1.username, t2.comment')
->getAll();
# innerJoin()
Tabloları INNER JOIN deyimi ile birleştirmek için kullanılır.
// SELECT t1.username, t2.comment FROM users as t1 INNER JOIN comments as t2 ON t1.user_id=t2.user_id
DB::table('users as t1')
->innerJoin('comments as t2', 't1.user_id=t2.user_id')
->select('t1.username, t2.comment')
->getAll();
# outerJoin()
Tabloları FULL OUTER JOIN deyimi ile birleştirmek için kullanılır.
// SELECT t1.username, t2.comment FROM users as t1 FULL OUTER JOIN comments as t2 ON t1.user_id=t2.user_id
DB::table('users as t1')
->outerJoin('comments as t2', 't1.user_id=t2.user_id')
->select('t1.username, t2.comment')
->getAll();
ORDER BY ve LIMIT Kullanımı
Kayıtların belirli bir kolona göre sıralanmış şekilde çekilmesini sağlayan ORDER BY deyimi ve çekilecek kayıt sayısını belirten LIMIT deyiminin karşığı olarak kullanılırlar.
# orderBy()
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Sıralama yapılacak kolon ismi |
| $direction | String | Sıralama yönü (Varsayılan: ASC) |
// SELECT * FROM tablo ORDER BY id ASC
DB::table('tablo')->orderBy('id')->getAll();
// SELECT * FROM tablo ORDER BY id DESC
DB::table('tablo')->orderBy('id', 'desc')->getAll();
# limit()
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $limit | Integer | Çekilecek kayıt sayısı |
| $start | Integer | Başlangıç kaydı (Varsayılan: 0) |
// SELECT * FROM tablo ORDER BY id DESC LIMIT 100
DB::table('tablo')->orderBy('id', 'desc')->limit(100)->getAll();
// SELECT * FROM tablo ORDER BY id ASC LIMIT 100, 50
DB::table('tablo')->order_by('id')->limit(100, 50)->getAll();
GROUP BY Kullanımı
Herhangi bir tablodan çekilen kayıtları gruplamak için groupBy() methodu kullanılır. Gruplama yapılacak kolon ismini parametre olarak alır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Gruplama yapılacak kolon ismi |
// SELECT kitap, COUNT(*) FROM tablo GROUP BY kitap
DB::table('tablo')->select('kitap, COUNT(*)')->groupBy('kitap')->getAll();
HAVING Kullanımı
GROUP BY ile gruplanan kayıtlar üzerinde koşul belirlemek için having() ve orHaving() methodları kullanılır. Parametreler where() ve orWhere() methodları ile aynıdır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Kolon adı |
| $operator | String | Mantıksal operatör ('=', '<', '>' , '<=', '>=') |
| $value | String | Kolon değeri |
// SELECT kitap, COUNT(*) GROUP BY kitap HAVING COUNT(*)>15
DB::table('tablo')
->select('kitap, COUNT(*)')
->groupBy('kitap')
->having('COUNT(*)', '>', 15)
->getAll();
// SELECT kitap, COUNT(*) GROUP BY kitap HAVING COUNT(*)>15 AND COUNT(*)<50
DB::table('tablo')
->select('kitap, COUNT(*)')
->groupBy('kitap')
->having('COUNT(*)', '>', 15)
->having('COUNT(*)', '<', 50)
->getAll();
// SELECT kitap, COUNT(*) GROUP BY kitap HAVING COUNT(*)>15 OR MAX(price)<50
DB::table('tablo')
->select('kitap, COUNT(*)')
->groupBy('kitap')
->having('COUNT(*)', '>', 15)
->orHaving('MAX(price)', '<', 50)
->getAll();
HAVING Gruplama
GROUP BY ile gruplanan kayıtlar üzerinde birden fazla koşul kullanılması gereken durumlarda, doğru sonuç alabilmek için koşulların gruplandırılması gerekir. Bunun için gruplandırmanın başladığı yerde havingGroupStart(), bittiği yerde de havingGroupEnd() methodları kullanılır.
Parametre olarak AND ve OR operatörlerini alabilir. Varsayılan durumda operatör AND olarak ayarlanmıştır. Oluşturulan gruptan önce başka bir koşul belirtilmiş ise, grup bu koşula parametrede belirtilen operatör ile bağlanır.
Gruptan önce herhangi bir koşul belirtilmemiş ise parametre vermeye gerek yoktur.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $operator | String | Kendisinden önceki koşula bağlanma operatörü |
Kullanımı WHERE Gruplama ile aynı şekildedir.
LIKE ve NOT LIKE Kullanımı
LIKE ve NOT LIKE ile koşullu sorgulama yapmak için like(), orLike(), notLike() ve orNotLike() methodları kullanılır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Kolon adı |
| $value | String | Değer |
// SELECT ad, soyad FROM tablo WHERE ad LIKE 'AHMET%'
DB::table('tablo')->select('ad, soyad')->like('ad', 'AHMET%')->getAll();
// SELECT ad, soyad FROM tablo WHERE ad LIKE 'AHMET%' AND soyad LIKE '%OĞLU'
DB::table('tablo')->select('ad, soyad')->like('ad', 'AHMET%')->like('soyad', '%OĞLU')->getAll();
// SELECT ad, soyad FROM tablo WHERE ad LIKE 'AHMET%' OR ad LIKE 'MEHMET%'
DB::table('tablo')->select('ad, soyad')->like('ad', 'AHMET%')->orLike('ad', 'MEHMET%')->getAll();
// SELECT ad, soyad FROM tablo WHERE ad NOT LIKE 'AHMET%'
DB::table('tablo')->select('ad, soyad')->notLike('ad', 'AHMET%')->getAll();
// SELECT ad, soyad FROM tablo WHERE ad NOT LIKE 'AHMET%' OR ad NOT LIKE 'MEHMET%'
DB::table('tablo')->select('ad, soyad')->notLike('ad', 'AHMET%')->orNotLike('ad', 'MEHMET%')->getAll();
IN ve NOT IN Kullanımı
IN ve NOT IN ile koşullu sorgulama yapmak için in(), orIn(), notIn() ve orNotIn() methodları kullanılır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Kolon adı |
| $value | Array | Değerler dizisi |
// SELECT ad, soyad FROM tablo WHERE sehir IN(9, 35, 20, 48)
DB::table('tablo')->select('ad, soyad')->in('sehir', [9,35,20,48])->getAll();
// SELECT ad, soyad FROM tablo WHERE sehir NOT IN(9, 35, 20, 48)
DB::table('tablo')->select('ad, soyad')->notIn('sehir', [9,35,20,48])->getAll();
BETWEEN Kullanımı
BETWEEN ile koşullu sorgulama yapmak için between(), orBetween(), notBetween() ve orNotBetween() methodları kullanılır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $column | String | Kolon adı |
| $firstValue | Integer | İlk değer |
| $secondValue | Integer | Son değer |
// SELECT ad, soyad FROM tablo WHERE yas BETWEEN 20 AND 30
DB::table('tablo')->select('ad, soyad')->between('yas', 20, 30)->getAll();
// SELECT ad, soyad FROM tablo WHERE yas NOT BETWEEN 20 AND 30
DB::table('tablo')->select('ad, soyad')->notBetween('yas', 20, 30)->getAll();
INSERT Kullanımı
Bir tabloya kayıt eklemek için insert() methodu kullanılır. Tabloya eklenecek verileri içeren bir dizi değişkeni parametre olarak alır. Kayıt işlemi başarılı ise true, değilse false döndürür.
insert() methodundan önce, kayıt yapılacak tabloyu belirlemek için table() methodu kullanılmalıdır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $table | String | Kayıt yapılacak tablo adı |
| $data | Array | Tabloya eklenecek veriler |
/// INSERT INTO tablo SET ad='John', soyad='Doe', sehir=34
$veriler = [
'ad' => 'John',
'soyad' => 'Doe',
'sehir' => 34
];
DB::table('tablo')->insert($veriler);
UPDATE Kullanımı
Herhangi bir tablodaki bir ya da birden fazla kayıt üzerinde düzeltme yapmak için update() methodu kullanılır. Düzeltilecek verileri içeren bir dizi değişkeni parametre olarak alır. Düzeltme işleminden etkilenen kayıt sayısını döndürür.
update() methodundan önce, düzeltme yapılacak tabloyu belirlemek için table() methodu kullanılmalıdır.
| Parametre | Veri Tipi | Açıklama |
|---|---|---|
| $table | String | Düzeltme yapılacak tablo adı |
| $data | Array | Düzeltilecek veriler |
/// UPDATE tablo SET ad='John', soyad='Doe', sehir=34 WHERE id=5
$veriler = [
'ad' => 'John',
'soyad' => 'Doe',
'sehir' => 34
];
DB::table('tablo')->where('id', '=', 5)->update($veriler);
DELETE Kullanımı
Herhangi bir tablodan bir ya da birden fazla kayıt silmek için delete() methodu kullanılır. Silme işleminden etkilenen kayıt sayısını döndürür.
delete() methodundan önce, kayıt silinecek tabloyu belirlemek için table() methodu kullanılmalıdır.
/// DELETE FROM tablo WHERE id=5
DB::table('tablo')->where('id', '=', 5)->delete();
Son Eklenen Kayıt ID
En son çalıştırılan INSERT sorgusu sonucunda eklenen kaydın id değerini öğrenmek için lastInsertId() methodu kullanılır.
$veriler = [
'ad' => 'John',
'soyad' => 'Doe',
'sehir' => 34
];
DB::table('tablo')->insert($veriler);
echo DB::lastInsertId();
Kayıt Sayısını Bulma
Bir SELECT sorgusu sonucunda çekilen kayıt sayısını öğrenmek için numRows() methodu kullanılır.
DB::table('tablo')->where('yas', '>', 20)->getAll();
echo DB::numRows();
Son Çalıştırılan Sorguyu Bulma
En son çalıştırılan SQL sorgusunu öğrenmek için lastQuery() methodu kullanılır.
echo DB::lastQuery();
SQL Sorgusu Çalıştırma
SQL cümlesi yazarak sorgu çalıştırmak için customQuery() methodu kullanılır.
// Tek satır veri çekmek için
DB::customQuery("SELECT * FROM tablo WHERE id=5")->getRow();
// Çoklu veri çekmek için
DB::customQuery("SELECT * FROM tablo")->getAll();
// Kayıt eklemek için
DB::customQuery("INSERT INTO tablo SET kolon1='deger1', kolon2='deger2'");
// Kayıt güncellemek için
DB::customQuery("UPDATE tablo SET kolon1='deger1', kolon2='deger2' WHERE id=5");
// Kayıt silmek için
DB::customQuery("DELETE FROM tablo WHERE id=5");
// Stored Procedure çalıştırmak için
DB::customQuery("CALL procedure_1()");