Dev Model Genişletmesi


    × Bunları biliyor muydunuz?
"Libraries/ dizini içine taşınan veya bu dizinde oluşturulan kütüphaneler hiç bir tanımlama gerektirmeden kullanılabilir. "


(ZN >= 5.3.7

Grand genişletmesi veritabanı yöntemlerini tablo düzeyine indirgeyerek daha pratik model kütüphaneleri geliştirmenize olanak sağlar. Hemen hemen DB::, DBForge:: ve DBTool:: kütüphanelerinde yer alan yöntemlerin çoğu bulunmaktadır. Bu başlık altında Grand genişletmesinin nasıl yapılacağını gösterilecektir.

 

 

# Bölüm Başıkları


# Grand Model Dosyası Oluşturmak
# Grand Kütüphanesi ile Gelen Yöntemler

 

 

# Grand Model Dosyası Oluşturmak


Grand ile genişleteceğiniz model dosyalarınızın sınıf adı, ilgili tablonun ismi ile kullanılmalıdır. Tablo adınızın mevcut kütüphanelerden birinin ismi ile çakışma durumu söz konusu ise sonuna model sınıfı adının sonuna Grand son eki getirebilirsiniz. Ya da const table = 'tablo_adi' sabiti ile ilgili tablonun adını belirtebilirsiniz. Eğer farklı bağlantı ayarlar yapacaksanız const connection = [] sabiti dizisi ile yapabilirsiniz. Şimdi örnek bir Grand Model dosyası oluşturalım.

Sabit Yapılandırması
string table = __CLASS__ Sınıf adı tablo isminden farklı ise bu sabite tablo ismi verilmelidir. Ön tanımlı olarak class adı kabul edilmiştir.
array connection = [] Eğer tablonuz farklı bir veritabanında ise ve bağlantı ayarları yapılması gerekiyorsa bu sabit yapılandırılmalıdır.
Kullanımı
File: Models/Users.php
<?php
class Users extends GrandModel
{

} 
Farklı Tabloya Bağlanma

Tablo adı ile sınıf adı farklı ise table sabiti ile tablo adı belirtilmelidir.

File: Models/Accounts.php
<?php
class Accounts extends GrandModel
{
    const table = 'Users';
} 
Farklı Bağlantı Oluşturma

Farklı bir veritabanı ile bağlantı kurulacaksa const connection = [] sabiti dizisi kullanabilirsiniz.

File: Models/Users.php
<?php
class Users extends GrandModel
{
    const table      = 'Example';

    const connection = 
    [
        'database' => 'otherDatabase',
        'user'     => 'MyDB',
        'password' => '1234'
    ];
}
Grand Son Eki

Eğer Tablo adının bir sınıf adı ile çakışma ihtimali söz konusu ise sınıf adının sonuna Grand son eki getirilerek kullanılması tavsiye edilir.

File: Models/Users.php
class UsersGrand extends GrandModel
{

}
Statik Erişim

Daha önce "Nesne Erişim Yöntemleri"' bölümünde anlatıldığı gibi modelin statik görünümünü oluşturabilirsiniz.

internal Ön Eki ile 

File: Models/Users.php
class InternalUsers extends GrandModel
{

}

Yukarıdaki kullanımda tablo adı "users" olarak kabul edilecektir.

Facade Sabiti ile

File: Models/Users.php
class UsersGrand extends GrandModel
{
    const facade = 'Users';
}
Konsol Kullanımı

Model dosyalarınızı aşağıdaki konsol komutu ile oluşturmanız da mümkündür.

php zerocore create-grand-model {name}

 

 

# Grand Kütüphanesi ile Gelen Yöntemler


Grand Kütüphanesi DB::, DBForge:: ve DBTool:: sınıflarının yöntemlerini kullanılır. Bu yöntemler Database Kütüphanesi bölümünde yeteri kadar örneklendirildiği için tekrar örneklendirilmeyecektir. Sadece model kütüphanesi ile nasıl kullanılabileceği üzerine örnek verilecektir.

GrandModel::create(array $data, $extra = NULL) : bool
GrandModel::insert(array $data) : bool
GrandModel::insertID() : int
GrandModel::duplicateCheck(...$args) : this
GrandModel::duplicateCheckUpdated(...$args) : this
GrandModel::select(...$select) : this
GrandModel::updateColumnName(array $data, string $value) : bool
GrandModel::update(array $data, string $column, string $value) : bool
GrandModel::deleteColumnName(string $value) : bool
GrandModel::delete(string $column, string $value) : bool
GrandModel::rowColumnName() : object
GrandModel::resultColumnName() : object
GrandModel::row($printable = false) : mixed
GrandModel::result(string $type = 'object') : mixed
GrandModel::columns() : array
GrandModel::totalColumns() : int
GrandModel::increment($columns, int $increment = 1) : bool
GrandModel::decrement($columns, int $decrement = 1) : bool
GrandModel::status(string $type = 'row') : mixed
GrandModel::where($column, string $value = NULL, string $logical = NULL) : this
GrandModel::whereGroup(...$args) : this
GrandModel::having($column, string $value = NULL, string $logical = NULL) : this
GrandModel::havingGroup(...$args) : this
GrandModel::innerJoin(string $table, string $otherColumn, string $operator = '=') : this
GrandModel::outerJoin(string $table, string $otherColumn, string $operator = '=') : this
GrandModel::leftJoin(string $table, string $otherColumn, string $operator = '=') : this
GrandModel::rightJoin(string $table, string $otherColumn, string $operator = '=') : this
GrandModel::orderBy($condition, string $type = NULL) : this
GrandModel::groupBy(...$args) : this
GrandModel::limit($start = 0, int $limit = 0) : this
GrandModel::add() : bool
GrandModel::modify() : bool
GrandModel::rename() : bool
GrandModel::drop() : bool
GrandModel::optimize() : string
GrandModel::repair() : string
GrandModel::backup(string $fileName = NULL, string $path = STORAGE_DIR) : string
GrandModel::truncate() : bool
GrandModel::error() : string
GrandModel::get() : this

 

 

# Create (ZN >= 5.3.72)


Aşğıda oluşturulmuş Users gibi bir model sınıfı oluşturduğumuzu varsayarsak yukarıda belirtilen yöntemleri bu kütüphane ile kullanabiliriz. Kolonları yöntem olarak kullanabilirsiniz. Bu kullanım ile birlikte create() yönteminin 1. parametresi artık aynı yöntemin 2. parametresi gibi kullanılır.

Parametreler

array $data Tablo kolon ve değer bilgileri.
array $extras Tablo oluşturma işleminin sonuna eklenecek ifadeler.
return bool

Kullanımı

Create Model File: Models/Users.php
<?php namespace Grand;

class Users extends \GrandModel
{
    const facade = 'Users'; # For static access
}
File: Controllers/ExampleController.php
Users::id([DB::int(11), DB::primaryKey(), DB::autoIncrement()])
         ->name([DB::varchar(255), DB::null()])
         ->address([DB::text()])
         ->create(DB::encoding())
CREATE TABLE user
(
    id INT(11) PRIMARY KEY AUTO_INCREMENT ,
    name VARCHAR(255) NULL ,
    address TEXT
)
CHARACTER SET utf8 COLLATE utf8_general_ci ;

 

 

# Insert (ZN >= 5.3.7)


Tabloya veri eklemek için kullanılır. Veri eklenecek kolonlar yöntem olarak da kullanılabilir. Aşağıdaki örnek bu kullanımın üzerinedir.

Parametreler

array $data Eklenecek veriler.
return bool

Kullanımı

Users::name('ZN Framework')->address('Istanbul')->insert();

output(Users::result());
0 => object
(
        id => string '1' ( length = 3 )
        name => string 'ZN Framework' ( length = 14 )
        address => string 'Istanbul/Turkey' ( length = 17 )
)
Otomatik Eşleştirme

Eğer gelen veri post veya get gibi bir gönderim ile forumdan yapılıyor ve forum girdi isimleri kolon adı olarak kullanılmışsa aşağıdaki gibi çok daha basit insert işlemi yapılabilir.

Users::insert('post');

 

 

# InsertID (ZN >= 4.0.1)


Son eklenen verinin ID değerini verir.

Parametreler

return int

Kullanımı

Users::insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul/Turkey'
]);

output(Users::insertID());
1

 

 

# DuplicateCheck (ZN >= 4.0.1)


Daha önce insert edilmiş bire bir aynı veri varsa tekrar ekleme yapmaz.

Parametreler

string ...$args = NULL Hangi kolonların kontrol edileceği belirtilir. Kolon belirtilmezse tüm kolonlar kontrol edilir.
return this

Kullanımı

Users::duplicateCheck()->insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul/Turkey'
]);

output(Users::result());
0 => object
(
        id => string '1' ( length = 3 )
        name => string 'ZN Framework' ( length = 14 )
        address => string 'Istanbul/Turkey' ( length = 17 )
)

 

 

# DuplicateCheckUpdate (ZN >= 4.3.7)


Daha önce insert edilmiş bire bir aynı veri varsa tekrar ekleme yapmaz. Bunun yerine güncelleme yapar.

Parametreler

string ...$args = NULL Hangi kolonların kontrol edileceği belirtilir. Kolon belirtilmezse tüm kolonlar kontrol edilir.
return this

Kullanımı

Users::duplicateCheckUpdate()->insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul'
]);

output(Users::result());
0 => object
(
        id => string '1' ( length = 3 )
        name => string 'ZN Framework' ( length = 14 )
        address => string 'Istanbul' ( length = 17 )
)

 

 

# Select (ZN >= 4.0.1)


Sorgu sonuçlarında hangi kolonların gözükeceğine karar vermek için kullanılır.

Parametreler

string ...$columns Hangi kolonların istendiği. Bu parametre belirtilmezse tüm kolonlar listelenir.
return this

Kullanımı

$result = Users::select('id', 'name')->result();

output($result);
0 => object
(
        id => string '1' ( length = 3 )
        name => string 'ZN Framework' ( length = 14 )
)

 

 

# UpdateColumnName (ZN >= 4.5.1)


Tabloda belirtilen kolon son ekine göre veriyi güncellemek için kullanılır.

Parametreler

array $data Güncellenecek veriler.
scalar $value Kolon değeri.
return bool

Kullanımı

Users::updateId
([
    'name'    => 'ZERONEED',
    'address' => 'Istanbul/Turkey'
], 1);
Uyarı: Kolon isimleri için harf duyarlılığı açıksa kolon adını buna göre yazmanız gerekmektedir.

Harf duyarlılığı açık ve tablodaki kolon adı id ise kullanım aşağıdaki gibi olmalıdır:

Users::updateid
([
    'name'    => 'ZERONEED',
    'address' => 'Istanbul/Turkey'
], 1);

 

 

# Update (ZN >= 5.3.7)


Tabloda herhangi bir veriyi güncellemek için kullanılır. Veri güncellenecek kolonlar yöntem olarak da kullanılabilir. Aşağıdaki örnek bu kullanımın üzerinedir.

Parametreler

array $data Güncellenecek veriler.
string $column Kolon adı.
scalar $value Kolon değeri.
return bool

Kullanımı

Users::name('ZN')->address('Istanbul/Turkey')->update();

output(Users::result());
0 => object
(
        id => string '1' ( length = 3 )
        name => string 'ZN' ( length = 10 )
        address => string 'Istanbul/Turkey' ( length = 17 )
)
Otomatik Eşleştirme

Eğer gelen veri post veya get gibi bir gönderim ile forumdan yapılıyor ve forum girdi isimleri kolon adı olarak kullanılmışsa aşağıdaki gibi çok daha basit update işlemi yapılabilir.

Users::update('post', 'id', 5);

 

 

# DeleteColumnName (ZN >= 4.5.1)


Tabloda belirtilen kolon son ekine göre veriyi silmek için kullanılır.

Parametreler

string $value Kolon değeri.
return bool

Kullanımı

Users::deleteId(1);

 

 

# Delete (ZN >= 4.0.1)


Tabloda herhangi bir veriyi silmek için kullanılır.

Parametreler

string $column Hangi kolon.
scalar $value Kolon değeri
return bool

Kullanımı

Users::delete('id', 1);

output(Users::result());
empty

 

 

# RowColumnName (ZN >= 4.4.7)


Tabloda yer alan herhangi bir kolon adına göre 1 satır kayıt almak için kullanılır.

Parametreler

string $value Kolon değeri.
return orbject

Kullanımı

output( Users::rowId(1) );
output( Users::rowName('example') );
output( Users::rowEmail('example@example.com') );

 

 

# ResultColumnName (ZN >= 4.4.7)


Tabloda yer alan herhangi bir kolon adına göre kayıtları almak için kullanılır.

Parametreler

string $value Kolon değeri.
return object

Kullanımı

output( Users::resultId(1) );
output( Users::resultName('example') );
output( Users::resultEmail('example@example.com') );

 

 

# Result (ZN >= 4.4.7)


DB::get($table)->result() kullanımı gibidir.

Parametreler

string $type = 'object'  Alınan verinin türü.
return object | array | json

Kullanımı

output( Users::result() );
TotalRows

Bu yöntem bir result veya row ile beraber kullanılmalıdır.

Kullanımı

output( Users::limit(NULL, 5)->result() );
output( Users::totalRows() );

Result olmadan sadece toplam kayıt sayısının istenmesi durumunda aşağıdaki gibi kullanımı önerilmektedir.

Users::get()->totalRows();
Pagination

Bu yöntem bir result veya row ile beraber kullanılmalıdır.

Kullanımı

output( Users::limit(NULL, 5)->result() );
output( Users::pagination() );

 

 

# Add (ZN >= 5.3.7)


Tabloya kolon eklemek için kullanılır.

Paket[6.20.6.30][2021-01-25] Güncellemesi

Sorgu sonuna add() koymak artık zorunlu.

Parametreler

return this

Kullanım

Users::address([DB::text()])->date([DB::datetime()])->add();

 

 

# Modify (ZN >= 5.3.7)


Tablodaki kolon özelliklerini güncellemek için kullanılır. Yöntem ismi ile kolon güncellemeniz de mümkün. Tek yapmanız gereken yöntem adına güncellenecek kolon adını ve parametresine özelliklerini belirtmelisiniz. Eğer güncellenecek kolon yoksa ekleme işlemi yapar.

Paket[6.20.6.30][2021-01-25] Güncellemesi

Sorgu sonuna modify() koymak artık zorunlu.

Parametreler

return this

Kullanım

Users::address([DB::varchar(500)])->date([DB::timestamp()])->modify();

 

 

# Rename (ZN >= 5.3.7)


Tablodaki kolon ismini güncellemek için kullanılır.

Paket[6.20.6.30][2021-01-25] Güncellemesi

Sorgu sonuna rename() koymak artık zorunlu.

Parametreler

return this

Kullanım

Users::date(['adddate', DB::timestamp()])->rename();

 

 

# Drop (ZN >= 5.3.7)


Tablodan kolon silmek için kullanılır.

Paket[6.20.6.30][2021-01-25] Güncellemesi

Sorgu sonuna drop() koymak artık zorunlu.

Parametreler

return bool

Kullanım

Users::address()->adddate()->drop;

 

 

# Get (ZN >= 6.0.6.0)


Tablo nesnesini almak için kullanılır. DB::get($table) kullanımı gibidir. Yeni bir tablo nesnesine bağlı kullanımların gerekli olması durumunda kullanılabilir.

Parametreler

return this

Kullanım

$tickets = Tickets::limit(NULL, 10)->get();

output( $tickets->result() );
output( $tickets->totalRows() );
output( $tickets->pagination() );