Dev Model Genişletmesi


    × Bunları biliyor muydunuz?
"ZN Framework Custom Edition dağıtımı ile kendinize özel proje dizin yapısı tasarlabilirsiniz."


(ZN >= 4.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/Example.php
<?php
class Example extends GrandModel
{
    // Eğer sınıf adı ile tablo adı farklı ise
    // const table = 'TabloAdi'; ile farklı bir
    // tablo adı belirtebilirsiniz.
    const table = 'Examples';
} 

Dikkat edilirse tablo adı farklı olduğu için table sabiti ile tablo adını belirtebilirsiniz. Eğer bu sabit belirtmeseydi tablo adı Example olarak belirlenecekti.

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

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

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

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

File: Models/UserGrand.php
class UserGrand extends GrandModel
{

}

Internal ön eki kullanımlı model dosyaları da tanımlayabilirsiniz.

File: Models/UserGrand.php
class InternalUserGrand extends GrandModel
{

}

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

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.

Bool create(Array $data, $extra = NULL)
Bool insert(Array $data)
Int insertID()
This duplicateCheck(...$args)
This duplicateCheckUpdated(...$args)
This select(...$select)
Bool updateColumnName(Array $data, String $value)
Bool update(Array $data, String $column, String $value)
Bool deleteColumnName(String $value)
Bool delete(String $column, String $value)
Object rowColumnName()
Object resultColumnName()
Mixed row($printable = false)
Mixed result(String $type = 'object')
Array columns()
Int totalColumns()
Bool increment($columns, Int $increment = 1)
Bool decrement($columns, Int $decrement = 1)
Mixed status(String $type = 'row')
Int totalRows(Bool $status = false)
This where($column, String $value = NULL, String $logical = NULL)
This whereGroup(...$args)
This having($column, String $value = NULL, String $logical = NULL)
This havingGroup(...$args)
This innerJoin(String $table, String $otherColumn, String $operator = '=')
This outerJoin(String $table, String $otherColumn, String $operator = '=')
This leftJoin(String $table, String $otherColumn, String $operator = '=')
This rightJoin(String $table, String $otherColumn, String $operator = '=')
This orderBy($condition, String $type = NULL)
This groupBy(...$args)
This limit($start = 0, Int $limit = 0)
String pagination(String $url = NULL, Array $settings = [], Bool $output = true)
Bool rename(String $newName)
Bool addColumn(Array $column)
Bool modifyColumn(Array $column)
Bool renameColumn(Array $column)
Bool dropColumn($column)
String optimize()
String repair()
String backup(String $fileName = NULL, String $path = STORAGE_DIR)
Bool drop()
Bool truncate()
String error()

 

 

# Create (ZN >= 5.3.72)


Yukarıda oluşturulmuş InternalUserGrand modeli gibi bir model sınıfı oluşturduğumuzu varsayarsak yukarıda belirtilen yöntemleri bu kütüphane ile kullanabiliriz. Kolonları yöntem olarakta 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/UserGrand.php
<?php
class InternalUserGrand extends GrandModel
{

}
File: Controllers/ExampleController.php
UserGrand::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ı
UserGrand::name('ZN Framework')->address('Istanbul')->insert();

output(UserGrand::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.

UserGrand::insert('post');

 

 

# InsertID (ZN >= 4.0.1)


Son eklenen verinin ID değerini verir.

Parametreler
Void
Return Int
Kullanımı
UserGrand::insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul/Turkey'
]);

output(UserGrand::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ı
UserGrand::duplicateCheck()->insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul/Turkey'
]);

output(UserGrand::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ı
UserGrand::duplicateCheckUpdate()->insert
([
    'name'    => 'ZN Framework',
    'address' => 'Istanbul'
]);

output(UserGrand::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 = UserGrand::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ı
UserGrand::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ı
UserGrand::name('ZN')->address('Istanbul/Turkey')->updateName('ZN Framework');

output(UserGrand::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.

UserGrand::update('post');

 

 

# 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ı
UserGrand::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ı
UserGrand::delete('id', 1);

output(UserGrand::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 Object
Kullanımı
output( UserGrand::rowId(1) );
output( UserGrand::rowName('example') );
output( UserGrand::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( UserGrand::resultId(1) );
output( UserGrand::resultName('example') );
output( UserGrand::resultEmail('example@example.com') );

 

 

# AddColumn (ZN >= 5.3.7)


Tabloya kolon eklemek için kullanılır. Standart addColumn() yöntemi kullanılabileceği gibi yöntemsel kolonlar da kullanılabilir. Yöntem ismi ile kolon eklemeniz mümkün. Tek yapmanız gereken yöntem adına eklenecek kolon adını ve parametresine özelliklerini belirtmelisiniz.

Parametreler
Array $column Eklenecek kolon ve kolon özellikleri.
Return This
Kullanım
UserGrand::address([DB::text()])->date([DB::datetime()]);

 

 

# ModifyColumn (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.

Parametreler
Array $column Güncellenecek kolon ve kolon özellikleri.
Return This
Kullanım
UserGrand::address([DB::varchar(500)])->date([DB::timestamp()]);

 

 

# RenameColumn (ZN >= 5.3.7)


Tablodaki kolon ismini güncellemek için kullanılır. Yöntem ismi ile kolon ismini güncellemeniz de mümkün. Tek yapmanız gereken yöntem adına güncellenecek kolon adını ve parametresine özelliklerini belirtmelisiniz.

Parametreler
Array $column Güncellenecek kolon ismi ve kolon özellikleri.
Return This
Kullanım
UserGrand::date(['adddate', DB::timestamp()]);

 

 

# DropColumn (ZN >= 5.3.7)


Tablodan kolon silmek için kullanılır. Yöntem ismi ile kolon silmeniz de mümkün. Tek yapmanız gereken yöntem adına silinecek kolon adını parametresini de NULL belirtmelisiniz.

Parametreler
String $column Silinecek kolon ismi.
Return Bool
Kullanım
UserGrand::address(NULL)->adddate(NULL);