Genel Yöntemler


    × Bunları biliyor muydunuz?
"Aktif kontrolcü tarafından otomatik olarak yüklenen görünümleri masterpage olarak belirlenen sayfa içerisinde $view değişkeni ile konumlandırabilirsiniz."


ZN Framework farklı veritabanı platformlarını desteleyecek şekilde oluşturulmuş veritabanı kütüphanesine sahiptir. Hangi platformların desteklendiği bir önceki konuda açıklanmıştır. Özellikle MySQL platformu merkeze alınarak bu kütüphane geliştirilmiştir. MySQL ile tam uyumlu olan Database sınıfları diğer veritabanı platformlarına da neredeyse tam uyumluluk sağlayacak şekilde genişletilmiştir.

Database kütüphanesi sayesinde neredeyse hiç bir SQL kodu yazmadan sorgularınızı oluşturmanıza olanak sağlar. Özellikle söz dizimi oldukça anlamlı ve kullanıcıların kodları anlayabileceği yapıdadır. ZN Framework'ün Database kütüphanesi ile oldukça zevkli ve keyif alarak kod yazacağınızı düşünüyoruz. Temel prensibi basitlik olan ZN Framework bu prensibini kütüphane içinde göstermeye çalışmıştır.

ZN Framework Veritabanı kütüphanesi SQL Injection saldırılarını engellemek amaçlı bazı önlemler almıştır. Tek tırnak (') içeren verilerde kesinlikle tırnak işareti HTML numerik koda çevrilerek kaydedilir. Çift tırnak kullanımına izin verilir ancak bazı riskleri azaltmak için güvenlik yöntemlerine yer verilmiştir. Sorgularınızda hiç bir güvenlik önlemi alınmasa dahi veri güvenliği yüksek düzeyde sağlanmıştır, ancak en gelişmiş güvenlik sistemlerinin dahi aşılabildiği günümüzde hiç kimse size veri güvenliği konusunda %100 garanti veremez.

 

 

# Kurulum


ZN dağıtımları için kurulum gerekmez.

↓ composer require znframework/package-database

 

 

# Yöntemler


DB::select(string ...$condition) : this
DB::preselect(string $query) : this
DB::where(mixed $column, string $value = NULL, string $logical = 'AND') : this
DB::groupBy(string ...$condition) : this
DB::orderBy(mixed $condition, string $type = NULL) : this
DB::limit(int $start = NULL, int $limit = 0) : this
DB::get(string $table, string $return = 'object') : this
DB::result(string $type = 'object') : object
DB::columns() : array
DB::tableName() : string
DB::pagination(string $url = NULL, array $settings = [], bool $output = true) : string
DB::status(string $table) : this
DB::isExists(string $table, string $column, string $value) : bool
DB::aliases(array $aliases) : this
DB::insert(string $table = NULL, array $datas = []) : bool
DB::update(string $table = NULL, array $set = []) : bool
DB::delete(string $table = NULL) : bool
DB::affectedRows() : int
DB::increment(string $table = NULL, mixed $columns = [], int $increment = 1) : bool
DB::transaction(callable $callback) : bool
DB::query(string $query, array $secure = []) : this
DB::caching(string $time, string $driver = 'file') : this
DB::version() : string

 

 

# Select


SQL SELECT deyiminin karşılığıdır. Kullanımı zorunlu değildir. Belli kolonlardan veriler isteniyorsa bu yöntem kullanılır.

string ...$columns = '*' Seçim sonucunda elde edilmesi istenilen kolonlar.
return this

Kullanımı

$users = DB::select('id', 'name', 'address')->users();

Tüm Kolonları Almak

select() yöntemi kullanılmadığı taktirde bütü kolonlar istenmiş olur.

$users = DB::users();

 

 

# Preselect [8.4.0][2023-07-17]


SQL SELECT deyiminin başına SQL sorgusu eklemek için kullanılır.

string $query SELECT deyiminin başına eklenecek sorgu.
return this

Kullanımı

$users = DB::preselect('SET STATEMENT MAX_STATEMENT_TIME = 10 FOR')
           ->select('id', 'name', 'address')
           ->users();
SET STATEMENT MAX_STATEMENT_TIME = 10 FOR SELECT id, name, address FROM users

 

 

# Where / Having


SQL WHERE deyiminin karşılığıdır. Kullanımı zorunlu değildir. İşlemlerin belli koşullara dayandırılması gerektiği zaman kullanılır.

Tekli Form
string $columnName Kolon adı.
string $value Kolon değeri.
string $logical = 'AND' Bağlaç.
Seçenekler AND, OR
return this
Çoklu Form
array $columnAndValues Kolonlar ve değerler.
return this

Kullanımı

Eşitlik kontrolünde = operatörü kullanılmak zorunda değildir.

$users = DB::where('id', 1)->users();

Eşitlik durumu dışındaki karşılaştırmalarda operatör kullanılmak zorundadır.

$users = DB::where('id !=', 1)->users();

Çoklu Koşul

Birden fazla where() bağlacıda kullanabilirsiniz.

$users = DB::where('id', 1) # Ön tanımlı AND
           ->where('name !=', 'ZN', 'or')
           ->where('name !=', 'ZN4')
           ->users();
SQL: SELECT * FROM users WHERE id = '1' and name != 'ZN' or name != 'ZN4'

Dizi Kullanımı

where() için 1. parametre dizi veri türüde içerebilir. Bu kullanım where() yöntemine birden fazla koşulu dizi içinde gönderebilme ihtiyacı içindir.

$users = DB::where
       ([
           ['id', 1, 'and'],
           ['name !=', 'ZN', 'or'],
           ['name !=', 'ZN4']
       ])
       ->users();
SQL: SELECT * FROM users WHERE id = '1' and name != 'ZN' or name != 'ZN4'

Çevrimler

Çevrimlerin amacı hem veri güvenliğini sağlamak hem de bazı kullanımlara izin vermek için oluşturulmuştur.

int

Kolon değerini tam sayıya(integer) çevirmek için;

$example = DB::where('int:columnName', 'Example')->example();
SQL: SELECT * FROM tableName WHERE columnName = 0

float

Kolon değerini ondalıklı sayıya(float) çevirmek için;

$example = DB::where('float:columnName', 'Example')->example();
SQL: SELECT * FROM tableName WHERE columnName = 0

Expression

Kolon değerini tırnaksız hale çevirmek için;

$example = DB::where('exp:columnName', 'Example')->example();
SQL: SELECT * FROM tableName WHERE columnName = Example

şeklinde kullanılır.

Null Karşılaştırması [6.21.2][2021-07-28]

Null kontrolü yapmak için 2. parametrenin string veya doğrudan NULL olarak belirtilmesi yeterlidir.

DB::where('name', NULL)->where('phone', 'NULL')->delete('accounts');
DELETE FROM accounts WHERE name = null AND phone = null
WhereGroup

Birden fazla koşulun kullanılması durumunda koşulun doğru oluşturulabilmesi için gruplanması gerekir. Bu yönteminde yaptığı iş birden fazla koşulu parantezlere alarak gruplamaktır.

array $columnName Kolonlar ve değerleri.
return this  

Kullanımı

$users = DB::whereGroup
(
    ['id', 1, 'or'],
    ['id', 2],
    'and'
)
->whereGroup
(
    ['name', 'ZN', 'and'],
    ['address', 'Istanbul']  
)
->users()
SQL: SELECT * FROM users WHERE ( id = '1' or id = '2' ) and ( name = 'zn' and address = 'istanbul' )
Having

DB::where() yönteminin kullanımları ile birebir aynıdır.

Kullanımı

$example = DB::having('COUNT(*) >', 1200)->example();

 

 

# GroupBy


SQL GROUP BY deyiminin karşılığıdır. Sorguda gruplama yapılacağı zaman kullanılır.

array $columnName Kolonl adı.
return this  

Kullanımı

$users = DB::groupBy('name')->users(); 
SQL: SELECT * FROM users GROUP BY name
Not: DB::string() sorgunun string çıktısını verir.

 

 

# OrderBy


SQL ORDER BY deyiminin karşılığıdır. Sorguda sıralama yapılacağı zaman kullanılır.

mixed $column Kolon adı.
string $type = NULL Sıralama türü.
return this  

Kullanımı

$users = DB::orderBy('id', 'DESC')->where('id >', 10)->users();
SQL: SELECT * FROM users WHERE id > '10' ORDER BY id desc 

Çoklu Sıralama

Birden fazla kolonla sıralama yapılacaksa 1. parametre dizi olarak kullanılabilir.

$users = DB::orderBy(['name' => 'asc', 'country' => 'desc'])->users();

 

 

# Limit


SQL LIMIT deyiminin karşılığıdır. Sorgu sonuçlarına limit uygulanacağı zaman kullanılır.

Scalar $start Limitlemeye kaçıncı kayıttan başlanacağı. 2. parametre kullanılmayacaksa limit belirtmek için kullanılır. DB::pagination() yöntemi ile kullanılıyorsa bu parametre NULL kullanılabilir.
int $limit Kaç kayıt gösterileceği.
return this

Kullanımı

$users = DB::limit(10)->users();
SQL: SELECT * FROM users LIMIT 10
$users = DB::limit(5, 10)->users();
SQL: SELECT * FROM users LIMIT 5, 10

 

 

# Get


İşlem yapılacak tabloyu belirler. Bu yöntem SELECT sorgusunu çıktı almak üzere neticelendirecek nihai yani son yöntemdir.

string $tableName Tablo adı.
return this

Kullanımı

$users = DB::where('id !=', 1)->orderBy('date', 'ASC')->get('users');

DB::get() ile tamamlanan SELECT sorgularından sonra bu sorguya yönelik veriler alınabilir hale gelir.  

$products = DB::get('products');

 

 

# Result


SELECT sorgu sonuçlarını array, object veya json türünde veren yöntemdir. Ön tanımlı değeri object türüdür.

string $outputType = 'object' Tabloda gelen veriler bu parametrenin değiştirilmemesi durumunda object türünde döner.
object Döngüye giren sonuçların her bir kayıtta kolon değerine ulaşmak için $row->columnName formunda ulaşılmasını sağlar.
array Döngüye giren sonuçların her bir kayıtta kolon değerine ulaşmak için $row['columnName'] formunda ulaşılmasını sağlar.
json Sonuçların json formunda getirilmesini sağlar.
return mixed

Kullanımı

$users = DB::limit(10)->users();

foreach( $users->result() as $result )
{
    output('ID:' . $result->id .  ' - Name:' . $result->name);
}

Sonuçları dizi türünde almak için;

$users = DB::limit(10)->users();

foreach( $users->result('array') as $result )
{
    output('ID:' . $result['id'] . ' - Name:' . $result['name']);
}

Tablo Adına Göre Sonuç Alma

Tablo adını kullanarak tabloya ait kayıtları almak için oluşturulmuş pratik kullanımdır.

$blogResult = DB::blogResult();
$ticketResult = DB::ticketResult();
ResultArray

Sorgu sonuçlarını dizi türünde verir. DB::result('array') kullanımı ile aynıdır.

void
return array

Kullanımı

echo DB::limit(10)->users()->resultArray();
ResultJson

Sorgu sonuçlarını json dizgesi türünde verir.

void
return string

Kullanımı

echo DB::limit(10)->users()->resultJson();
JsonDecode [6.2.0]

Tabloda json olarak tutulan kolonların veri çekilirken result türüne göre object veya array olarak dönüştürmeyi sağlar. Sorgu sonucu yöntemleri (result(), resultArray(), row(), value()) ile birlikte kulanılabilir.

string ...$columns Json decode edilmesi istenen kolonlar belirtilir. Herhangi bir kolon belirtilmezse Json içeren tüm kolonlar decode edilir.
return string

Kullanımı

Belirli kolonlara göre çevirmek için parametre verin.

$users = DB::jsonDecode('Languages', 'Phones')->users()->result();

Yukarıdaki örnekte json veri içeren languages ve phones kolonlarının çevrilmesi sağlanmıştır.

Tüm Json İçeren Kolonlar

Herhangi bir parametre gönderilmediği taktirde json içeren tüm kolonlar çevrilecektir.

$users = DB::jsonDecode()->users()->result();
Row

Tek satır veriyi object türde almak için kullanılır. Parametresinin durumuna göre hem array hem de string türde değer döndürür.

string $type = 0 Kaçıncı kayıtın alınacağı.
1, 2, .... -1 Hangi indisli kayıtın alınacağıdır. Sondan kayıt getirmek için negatif değer verilebilir.
true Parametre true değeri alırsa seçili(muhtemelen id) ilk kolonun değerini verir
return object

Kullanımı

$users = DB::users();
$row = $users->row();

echo $row->id . ' - ' . $row->name;

Kayıt Indisi

Parametresine kayıt indeksi verebilirsiniz.

output($users->row(-1)); // Last row
output($users->row(0));  // First row
output($users->row(1));  // 2. row

Seçili Kolon Değeri

Parametresine true değeri vererek ilk kayıtın ilk kolonunun değerini çıktılatabilirsiniz.

echo $users->row(true); // First select column value

Tablo Adına Göre Satır Alma

Tablo adını kullanarak tabloya ait tek bir satır kayıtı almak için oluşturulmuş pratik kullanımdır.

$blogRow = DB::blogRow();
$ticketRow = DB::ticketRow();
Value

Sorgu sonucuna ait kayıtın ilk veya belirtilen kolonunun değerini verir. DB::row(true) yönteminin yaptığı işi yapar.

5.7.0 string $column = NULL Parametre olarak belirtilen kolonun değerini döndürür. Herhangi bir değişiklik yapılmaz ise sorgu sonucuna ait kayıtın ilk kolon değerini verir.
return string

Kullanımı

echo DB::where('id', 1)->select('name')->users()->value();
echo DB::select('sum(price)')->users()->value();

Bu yöntem özellikle 2. örnekte ki gibi kullanımlar için oluşturulmuştur.

Kolona Göre Değer Alma

Bu güncelleme ile artık parametre olarak kolon adı belirtilebilmektedir.

echo DB::users()->value('name');

Yukarıdaki kullanım users tablosuna ait bulunan ilk kayıtın name kolonuna ait değeri döndürür.

Kısa Kullanım

Daha kısa yoldan aşağıdaki gibi tek bir kolon değerine ulaşabilirsiniz.

echo DB::whereId(1)->usersRowName();
TotalRows

Sorgu sonucu toplam kayıt sayısını verir.

bool $realLimit = false Kayıt sayısı. Parametre true ayarlanırsa LIMIT kullanımından etkilenmez ve kayıt sayısını döndürür.
return int

Kullanımı

$users = DB::limit(5)->users();

echo $users->totalRows();     # 5
echo $users->totalRows(true); # 100

Gerçek Kayıt Sayısı

2. parametrenin true ayarlanması durumunda sorguda var olan LIMIT gerçek kayıt sayısına ulaşılmasını engellemez.

echo DB::limit(5)->users()->totalRows(true); # 100

 

 

# Columns


Sorgu sonucu tablonun kolonlarını dizi türünde verir.

void
return array

Kullanımı

output( DB::users()->columns() );
ColumnData

Sorgu sonucu tablonun kolonlarını ve kolonlara ait bilgileri verir. Parametre belirtilmezse tüm kolonları parametre belirtilirse sadece belirtilen kolon bilgilerini verir.

string $column = NULL Kolonlarla ilgili bilgi dizisi döner.  Parametre belirtilmezse tüm kolonların bilgi dizisi döner.
return array string name Kolon adı.
int type Tür.
int maxLength Kolon uzunluğu.
int primaryKey Birincil anahtar.
string default Varsayılan.

Kullanımı

$users = DB::users();

output($users->columnData());
output($users->columnData('id'));
TotalColumns

Sorgu sonucu tablonun kolon sayısını verir.

void
return int

Kullanımı

echo DB::users()->totalColumns();

 

 

# TableName


Sorgu yapılan tablonun adını verir.

void
return string

Kullanımı

$users = DB::users();

echo $users->tableName();
users

 

 

# Pagination


Sorgunuza göre sayfalama barı oluşturur. Sorguya göre şekillendiği için Pagination sınıf kullanmanıza gerek kalmadan çok daha basit bir şekilde sayfalama işlemi yapmış olursunuz. Saymalama işlemi için limit() yönteminin kullanılması zorunludur. Sayfalama ile ilgili görünüm yapılandırmaları için aşağıdaki dosya kullanılır.

Yapılandırma: Config/ViewObjects.php -> pagination
string $url = NULL Sayfa kayıt numarasının nereye ekleneceği. NULL tanımlı kalırsa aktif URL'nin sonuna eklenir.
array $config = [] Yapılandırmayı dosya yerine parametre olarak yapmak için kullanılır.
return string

Kullanımı

$users = DB::limit(NULL, 10)->users();

output($users->result());
output($users->pagination());

URL Parametresi

pagination() yöntemine parametre belirtilmezse mevcut URL üzerinden işlem yapar ve sayfalama ile ilgili kayıt numarası URL'nin sonuna eklenir. Şayet URL'deki son bölüm kayıt sayısı bilgisi olmayacaksa bu durumda 1. parametre'ye URL belirtmeniz gerekir. Aşağıda ki örnekte kayıt numarası bilgisinin URL sonunda olmadığında pagination() yönteminin 1. parametresinin nasıl kullanılacağı üzerinedir.

output($users->pagination('products/'.URI::segment(2).'/order/asc'));

Parametrik Yapılandırma

Doğrudan config dosyası yerine parametre olarak sayfalama ayarları yapmak isterseniz. pagination() yönteminin 2. parametresinden yararlanılır.

output($users->pagination(NULL, ['prevName' => 'prev', 'nextName' =>'next']));

 

 

# Status


İlgili tablonun durumu hakkında bilgi verir.

string $table Tablo adı.
return this

Kullanımı

output( DB::status('users')->row() ); 

Dizide Yer Alan Değerler

Name            => string 'users' ( length = 5 ),
Engine          => string 'InnoDB' ( length = 8 ),
Version         => string '10' ( length = 4 ),
Row_format      => string 'Compact' ( length = 9 ),
Rows            => string '4' ( length = 3 ),
Avg_row_length  => string '4096' ( length = 6 ),
Data_length     => string '16384' ( length = 7 ),
Max_data_length => string '0' ( length = 3 ),
Index_length    => string '0' ( length = 3 ),
Data_free       => string '0' ( length = 3 ),
Auto_increment  => string '34' ( length = 4 ),
Create_time     => string '2016-08-18 17:28:53' ( length = 21 ),
Update_time     => NULL ( length = 0 ),
Check_time      => NULL ( length = 0 ),
Collation       => string 'utf8_general_ci' ( length = 15 ),
Checksum        => NULL ( length = 0 ),
Create_options  => string '' ( length = 2 ),
Comment         => string '' ( length = 2 )

 

 

# IsExists


Tabloda belirtilen kolon ve değerinin olup olmadığını kontrol eder. Değer varsa true aksi halde false döner.

string $table Tablo adı.
string $column Kolon adı.
string $value Değer.
return bool

Kullanımı

if( DB::isExists('Users', 'name', 'John') )
{
     # Your codes...
}

 

 

# Aliases [6.18.0][2021-07-06]


Karmaşık sorgularda tablolara takma isim vermek için kullanılır.

array $aliases Dizi içine takma isim olarak kullanılacak ifadeler anahtar gerçek karşılıkları ise değer olarak eklenmelidir.
Örnek: ['t1' => 'users']
Dizi birden fazla takma isim verecek şekilde genişletilebilir.
return this

Kullanımı

$query = DB::aliases(['t1' => 'users', 't2' => 'profiles'])
           ->leftJoin('t2.uid', 't1.id')
           ->get('t1');

echo $query->stringQuery();
SELECT * FROM users t1 LEFT JOIN profiles t2 ON t2.uid = t1.id
Dikkat: Takma isim ataması yapılacaksa DB::get() yöntemine tablo ismi olarak takma isim belirtilmesi gerektiğine dikkat ediniz.

 

 

# Insert


SQL INSERT INTO TABLE VALUES deyiminin karşılığıdır. Kayıt eklemek için kullanılır. Ekleme işlemi oldukça kolaydır.

string $table Tablo adı.
mixed $data Eklenecek veriler.
return this

Kullanımı

DB::insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

Opsiyonel Kullanım

Kolon değerlerini aşağıdaki gibi de insert edebilirsiniz.

DB::column('name', 'NewName')
  ->column('address', 'NewAddress')
  ->insert('users');

Otomatik Eşleştirme

Bir dizideki veya Formdan gelen metot dizisinideki verileri kolonlarla otomatik olarak eşleştirip kaydettirmek için tablo adına ignore: ön eki getirilir.

DB::insert('ignore:users', Method::post());
DB::insert('ignore:users', Method::get());

Post Gönderimi

Bu kullanım size POST metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt ekleme işlemi gerçekleştirilir.

DB::insert('post:users');

Veri Manipülasyonu

POST dizisine kendiniz de değer eklemek isterseniz aşağıdaki gibi kullanabilirsiniz.

Post::add_date(date('Y-m-d-h-i-s'));
Post::ip(User::ip());

DB::insert('post:users');

Yukarıdaki kullanım diğer gönderim metotları içinde geçerlidir.

Get Gönderimi

Bu kullanım size GET metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt ekleme işlemi gerçekleştirilir.

DB::insert('get:users');

Request Gönderimi

Bu kullanım size REQUEST metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt ekleme işlemi gerçekleştirilir.

DB::insert('request:users');

Json Çevrimi

Gelen verinin array türünden veri olması durumunda veri otomatik olarak json türüne çevrilerek kaydedilir.

DB::insert('products', ['colors' => ['red', 'blue', 'green']]);

Tablo Adına Göre Ekleme

Tablo adına göre data eklemek için kullanılır.

DB::usersInsert(['name' => 'micheal']);

Çoklu Ekleme [6.10.0][2021-05-06]

 DB::insert() yönteminin 2. parametresini çoklu ekleme işlemi için kullanabilirsiniz.

DB::insert('users',
[
    ['name' => 'micheal'],
    ['name' => 'alex']
]);
Uyarı: Bu kullanım daha çok bir yerdeki verilerin başka bir yere aktarımında tercih edilmelidir. Bu nedenle bu kullanımda duplicate uygulamaları dahil bir çok ek işlev devre dışıdır.

Null Gönderimi [6.21.2][2021-07-28]

Null gönderimi yapmak için string veya doğrudan NULL olarak belirtilmesi yeterlidir.

DB::insert('users',
[
    'name'    => 'alex',
    'phone'   => NULL,
    'address' => 'NULL'
]);
DuplicateCheck
string ...$args = NULL Kontrol edilecek kolonlar. Boş geçilmesi durumunda tüm kolonlar kontrol edilir.
return this

Eğer eklenen veriden daha önce kayıt yapılmışsa bunu engellemek için duplicateCheck() yönteminden yararlanılır. Eğer belirli kolonların kontrolü yapılmak istenirse parametre içerisine sırayla belirtilebilir.

DB::duplicateCheck()->insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

Sadece name kolonunu kontrol edelim.

DB::duplicateCheck('name')->insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

Yukarıdaki kullanımlarda belirtilen koşullara göre kolon değerleri aynı ise işlem false döner.

DuplicateCheckUpdate
string ...$args = NULL Kontrol edilecek kolonlar. Boş geçilmesi durumunda tüm kolonlar kontrol edilir.
return this

Eğer aynı kolonlardan varsa ve insert yerine update ettirmek isterseniz duplicateCheckUpdate() yöntemi kullanılır.

DB::duplicateCheckUpdate()->insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

[string ...$args]

Sadece name kolonunu kontrol edelim. Eğer name kolonu aynı değerle daha önce kaydedilmişse o veri güncellenir.

DB::duplicateCheckUpdate('name')->insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

Yukarıdaki kullanımlarda belirtilen koşullara göre kolon değerleri aynı ise işlem update edilir ve update başarılı ise true döner.

IsUpdate [6.20.0][2021-07-23]

DB::duplicateCheckUpdate() yönteminin insert mi ya da update mi yaptığı hakkında bilgi edinmek için kullanılır. Eğer update işlemi gerçekleştirilmiş ise true aksi durumda false döner.

return bool

Kullanımı

if( DB::isUpdate() )
{
    # kodlarınız...
}
Object [6.20.0][2021-07-23]

Insert işleminden sonra eklenen veriyi obje olarak almanızı sağlar.  Böylece bu işlemden sonra tekrar DB::row() almanıza gerek kalmaz.

string $processColumn = 'id'
İşlem yapılan kolon ön tanımlı olarak id ayarlıdır. Farklı bir kolon belirtilmesi durumunda bu parametre tanımlanmalıdır. Postgres sürücüsü için bu parametre aynı zamanda DB::returningId() yöntemi gibi de davranır. Bu nedenle DB::returningId() yöntemi bu yöntemle birlikte kullanılamaz.
return this

Kullanımı

$row = DB::object()->insert('users',
[
    'name'    => 'Susan',
    'address' => 'Paris'
]);

output($row->name);
Susan
Unset [6.20.0][2021-07-23]

Otomatik eşleştirme ile eklenen veriler arasından tabloya kaydedilmesi istenmeyen verileri kaldırır.  $_POST veya $_GET ile gönderildiği halde tabloya kaydedilmesi istenmeyen durumlarda kullanılır.

string ...$columns İstenmeyen kolonlar.
return string

Kullanımı

Post::address('Paris');
Post::password('1234');
Post::status('1');

DB::unset('password', 'status')->insert('post:users');

Yukarıdaki örnekte 'password' ve 'status' kolonları otomatik eşleştirmede devre dışı bıraktık.

InsertId

Eklenen son kayıtın id değerini verir. Genellikle bir ekleme işleminden sonra ilgili kaydın id'si kullanılarak işlem yapmayı gerektiren durumlarda kullanılır.

void
return int

Kullanımı

DB::insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

echo DB::insertId(); # 37
ReturningId [6.16.0][2021-07-01] 

Bu yöntem sadece postgres sürücüsü ile beraber kullanılabilir. Insert işleminden DB::insertId() yöntemi ilgili kaydın id değerini döndürmektedir. Bu yöntem dönecek değerin kolonunu değiştirmek için kullanılır.

string $column Kolon adı.
return this

Kullanımı

DB::returningId('uid')->insert('users',
[
    'name' => 'John'
]);

Yukarıdaki kullanımdan sonra çalıştırılacak ilk DB::insertId() yöntemi DB::returningId() yöntemi ile belirlenen kolonun değerini döndürecektir.

$insertId = DB::insertId();

Güncelleme İşlemi [6.19.0][2021-07-12]

Postgres sürücüsü için DB::update() yöntemi genişletilerek güncelleme işlemlerinde de DB::insertId() yönteminin değer döndürmesi sağlandı.

HashId [6.15.0][2021-06-29]

Tablonuzun ID kolonu bu isimden başka bir isimle kullanıldığı durumlarda DB::insertId() yöntemi istenilen sonucu veremeyebilir. Bu durumda son eklenen veri ile ilgili işlemlerin doğru yapılabilmesi için bu yöntemden yararlanılabilir. Bu yöntem 32 haneli md5 formatında eşsiz bir Hash oluşturmaktadır. Öncelikle yapılması gereken ilgili tabloda Hash ID tutacak bir varchar kolon oluşturmaktır.

Kullanımı

Öncelikle Hash'in hangi kolona kaydedileceği belirtilmelidir. Tabi bu kolonu daha önce oluşturulmuş olmanız gerekiyor.

DB::hashIdColumn('hid')->insert('users',
[
    'name' => 'John'
]);

Yukarıdaki yöntemin kullanımından sonra son oluşturulan Hash bilgisine aşağıdaki gibi erişebilirsiniz.

$hashId = DB::hashId();
7a9ab21a0df2f5106ad44c77d4391166
Dikkat: Hash her ekran yenilenmesinde yeniden oluşturulur. Dolayısı ile insert işleminden sonra bu işleme bağlı diğer işlemler insert işleminin başarım durumuna göre ilerletilmelidir.
if( $insert )
{
    $row = DB::where('hid', DB::hashId())->get('users')->row();
}
InsertCSV

CSV Dosyasında yer alan kolon ve değerler tabloya eklemek için kullanılır. Bunun için CSV dosyasının en üst satırı kolon isimlerinden oluşmalıdır.

string $table Kaydedilecek tablo adı.
string $file CSV dosyasının yolu. Uzantısı yazılmaz.
return bool

Örnek CSV Dosyası

+-----------------------------------------------------------------+
| users_file.csv                                                  |
+----+----------------+---------------------------+---------------+
| id | name           | address                   | phone         |
+----+----------------+---------------------------+---------------+
| 1  | Micheal        | Italy                     | 12345         |
+----+----------------+---------------------------+---------------+
| 2  | Susan          | France                    | 54321         |
+----+----------------+---------------------------+---------------+

Kullanımı

DB::insertCSV('users', 'users_file');

 

 

# Update


SQL UPDATE TABLE SET deyiminin karşılığıdır. Kayıtları güncellemek için kullanılır. Kullanımı oldukça basittir.

string $table Tablo adı.
mixed $data Güncellenecek veriler.
return bool

Kullanımı

DB::where('id', 1)->update('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

Opsiyonel Kullanım

Kolon değerlerini aşağıdaki gibi de update edebilirsiniz.

DB::where('id', 1)
  ->column('name', 'NewName')
  ->column('address', 'NewAddress')
  ->update('users');

Otomatik Eşleştirme

Bir dizideki veya Formdan gelen metot dizisinideki verileri kolonlarla otomatik olarak eşleştirip güncellemek için tablo adına ignore: ön eki getirilir.

DB::where('id', 1)->update('ignore:users', Method::post());
DB::where('id', 1)->update('ignore:users', Method::get());

Post Gönderimi

Bu kullanım size POST metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt güncelleme işlemi gerçekleştirilir.

DB::where('id', 1)->update('post:users');

Veri Manipülasyonu

POST dizisine kendiniz de değer eklemek isterseniz aşağıdaki gibi kullanabilirsiniz.

Post::add_date(date('Y-m-d-h-i-s'));
Post::ip(User::ip());

DB::insert('post:users');

Yukarıdaki kullanım diğer gönderim metotları içinde geçerlidir.

Get Gönderimi

Bu kullanım size GET metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt güncelleme işlemi gerçekleştirilir.

DB::where('id', 1)->update('get:users');

Request Gönderimi

Bu kullanım size REQUEST metodu aracılığı ile tek tek göndermek zorunda olduğunuz değerleri, kolon isimleriyle eşleştirerek otomatik olarak işleyebilmenizi sağlar. Bu yöntem sayesinde 2. parametrenin kullanılmasına gerek kalmadan çok basit bir şekilde kayıt güncelleme işlemi gerçekleştirilir.

DB::where('id', 1)->update('request:users');

Json Çevrimi

Gelen verinin array türünden veri olması durumunda veri otomatik olarak json türüne çevrilerek kaydedilir.

Tablo Adına Göre Güncelleme

Tablo adına göre data güncellemek için kullanılır.

DB::whereId(1)->usersUpdate(['name' => 'micheal']);

Null Gönderimi [6.21.2][2021-07-28]

Null gönderimi yapmak için string veya doğrudan NULL olarak belirtilmesi yeterlidir.

DB::where('id', 1)->update('users',
[
    'name'    => 'alex',
    'phone'   => NULL,
    'address' => 'NULL'
]);
Object [6.20.0][2021-07-23]

Update işleminden sonra eklenen veriyi obje olarak almanızı sağlar.  Böylece bu işlemden sonra tekrar DB::row() almanıza gerek kalmaz. Update işlemi için bu yöntem parametre kabul etmez. Update işlemi aşamasında kullanılan where yapısına göre güncellenen veriyi döndürür. Şayet güncellenen veri birden fazla ise bu durumda koşula uygun güncellenen verilerden sonuncusunu döndürür.

return this

Kullanımı

$row = DB::object()->where('Name', 'Susan')->update('users',
[
    'address' => 'London'
]);

output($row->address);
London
Unset [6.20.0][2021-07-23]

Otomatik eşleştirme ile güncellenen veriler arasından tabloya kaydedilmesi istenmeyen verileri kaldırır.  $_POST veya $_GET ile gönderildiği halde tabloya kaydedilmesi istenmeyen durumlarda kullanılır.

string ...$columns İstenmeyen kolonlar.
return string

Kullanımı

Post::address('Paris');
Post::password('1234');
Post::status('1');

DB::unset('password', 'status')->where('id', 1)->update('post:users');

Yukarıdaki örnekte 'password' ve 'status' kolonları otomatik eşleştirmede devre dışı bıraktık.

 

 

# Delete


SQL DELETE FROM TABLE deyiminin karşılığıdır. Kayıt silmek için kullanılır.

string $table Tablo adı.
return bool

Kullanımı

DB::where('id', 1)->delete('users');

 

 

# AffectedRows


Son sorgu işlemlerinden etkilenen kayıt sayısını verir. Bu işlem bir ekleme, silme, güncelleme gibi kayıtları etkileyen durumlarda sonuç verir.

void
return int

Kullanımı

DB::insert('users',
[
    'name'    => 'NewName',
    'address' => 'NewAddress'
]);

echo DB::affectedRows(); # 1

 

 

# Increment


Bir tablodaki belirtilen kolonların değerini istenilen miktarda artırmak için kullanılır. Ön tanımlı artırım değeri 1'dir.

string $table Artırım yapılacak tablo adı.
mixed $column Artırım yapılacak kolon veya kolonlar.
int $count = 1 Artırım miktarı.
return bool

Kullanımı

DB::increment('users', 'activityCount');     // Increment 1
DB::increment('users', 'activityCount', 10); // Increment 10 

Çoklu Artırım

Birden fazla kolonda aynı anda artırım yapmak için;

DB::increment('users', ['activityCount', 'loginCount'], '10'); // Increment 10

Yukarıda hem activityCount hemde loginCount kolonlarının değeri 10 artırılmıştır.

Decrement

Bir tablodaki belirtilen kolonların değerini istenilen miktarda azaltmak için kullanılır. Ön tanımlı azaltım değeri 1'dir.

Kullanımı

DB::decrement('users', 'activityCount');     // Decrement 1
DB::decrement('users', 'activityCount', 10); // Decrement 10 

Çoklu Azaltım

Birden fazla kolonda aynı anda azaltım yapmak için;

DB::decrement('users', ['activityCount', 'loginCount'], '10'); // Decrement 10

Yukarıda hem activityCount hemde loginCount kolonlarının değeri 10 azaltılmıştır.

 

 

# Transaction 


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 bool

Kullanımlar

DB::transStart()
  ->transQuery('...queries...')
  ->transQuery('...queries...')
  ->transEnd();

Şeklinde kullanabilirsiniz. Transaction sorguların başarılı olması durumunda true başarız olması durumunda false döner.

Çağrılabilir İşlev Kullanımı [6.2.0]

Bu güncellemede veritabanı yöntemlerinin geri çağrım işlevi ile transaction sorgu oluşturabilmesi sağlanmıştır.

$return = DB::transaction(function()
{      
    DB::insert('ExampleTable', ['Name' => 'John', 'Mail' => '[email protected]']);
    DB::where('ID', 5)->update('ExampleTable', ['Name' => 'Micheal']);
});

echo $return; # true or false

Transaction sorguların başarılı olması durumunda true başarız olması durumunda false döner.

Zincirleme Kullanım [6.2.0]

Bu güncellemede veritabanı yöntemlerinin sıralı kullanımı ile transaction sorgu oluşturabilmesi sağlanmıştır.

$return DB::transStart()
          ->insert('ExampleTable', ['Name' => 'John', 'Mail' => '[email protected]'])
          ->where('ID', 5)->update('ExampleTable', ['Name' => 'Micheal'])
          ->transEnd();

echo $return; # true or false

Transaction sorguların başarılı olması durumunda true başarız olması durumunda false döner.

Bilgi: Commit ve Rollback işlemleri otomatik olarak gerçekleştirilir.

 

 

# Query


Standart SQL sorguları yazmak için kullanılır. Bu yöntemin kullanımın SELECT üzerine yapılmışsa gelen verileri result(), row() gibi yöntemleri kullanarak alabilirsiniz. Yani get() yönteminden sonra kullanılabilen çıktı alma yöntemlerinin tamamı kullanılabilir. Standart SQL sorguları enjeksiyon saldırılarına açık olduğu için özellikle dışarıdan SQL enjeksiyonu yapılabilecek yerlerde kullanılmamalıdır. Mecbur kalmadıkça kullanmamanız önerilir. Kullanmak zorunda olursanız güvenlik için secure() yöntemini mutlaka kullanmaya özen gösteriniz.

string $query SQL sorgusu.
return this

Kullanımı

$query = DB::query('SELECT * FROM users');
output($query->result());

Güvenlik Süzgeci

Güvenlik secure() yönteminin kullanımı;

Sıralı Kullanım

DB::secure([1, 'ZN'])
  ->query('SELECT * FROM users WHERE id = ? or name = ?')
SELECT * FROM users WHERE id = '1' or name = 'ZN'

Bu sayede süzgeçten geçirilmesini istediğiniz verileri belirlemiş olursunuz.

Belirteç Tanımlama

DB::secure([':x' => 1, ':y' => 'ZN'])
  ->query('SELECT * FROM users WHERE id = :x or name = :y');
SELECT * FROM users WHERE id = '1' or name = 'ZN' 
ExecQuery

Tek seferlik çalıştırılabilir sorgular için kullanılır. SELECT deyimi içeren sonuç alma sorguları ile kullanılamazlar. CREATE, INSERT, ALTER, DROP, DELETE gibi sorgularla kullanımı tavsiye edilir. query() yönteminin kullanımı ile aynı mantıktadır.

string $query SQL sorgusu.
return bool

Kullanımı

DB::execQuery('DROP TABLE products');
MultiQuery

Birden fazla sorguyu çalıştırmak için kullanılır. SELECT deyimi içeren sonuç alma sorguları ile kullanılamazlar. CREATE, INSERT, ALTER, DROP, DELETE gibi sorgularla kullanımı tavsiye edilir. query() yönteminin kullanımı ile aynı mantıktadır.

string $query SQL sorgusu.
return bool

Kullanımı

DB::multiQuery('DROP TABLE products; CREATE TABLE contact(...)');

 

 

# Caching


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

Kullanımlar

$photos = DB::caching('1 day')->photos();

output($photos->row());

$photos = DB::caching('10 second', 'redis')->photos();

output($photos->result());
CleanCaching

Ön belleklenen sorguyu silmek için kullanılır. Hangi sorgunun ön belleği silinecekse o sorgu ile kullanılır.

void
return this

Kullanımlar

$photos = DB::photos();

$photos->cleanCaching();

output($photos->row());

 

 

# Version


Mevcut veritabanı platformunun sürüm bilsini verir.

return string

Kullanımlar 

echo DB::version();