Dev Model Genişletmesi
"Kontrolcü yöntemlerine parametre olarak enjekte edilen sınıfların örneklerine aynı zamanda görünmlerinden de erişebilirsiniz."
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.
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. |
<?php
class Users extends GrandModel
{
}
Tablo adı ile sınıf adı farklı ise table sabiti ile tablo adı belirtilmelidir.
<?php
class Accounts extends GrandModel
{
const table = 'Users';
}
Farklı bir veritabanı ile bağlantı kurulacaksa const connection = [] sabiti dizisi kullanabilirsiniz.
<?php
class Users 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 sınıf adının sonuna Grand son eki getirilerek kullanılması tavsiye edilir.
class UsersGrand extends GrandModel
{
}
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
class InternalUsers extends GrandModel
{
}
Yukarıdaki kullanımda tablo adı "users" olarak kabul edilecektir.
Facade Sabiti ile
class UsersGrand extends GrandModel
{
const facade = 'Users';
}
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.
# Create
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ı
<?php namespace Grand;
class Users extends \GrandModel
{
const facade = 'Users'; # For static access
}
Users::id([DB::int(11), DB::primaryKey(), DB::autoIncrement()])
->name([DB::varchar(255), DB::null()])
->address([DB::text()])
->create(DB::encoding())
(
id INT(11) PRIMARY KEY AUTO_INCREMENT ,
name VARCHAR(255) NULL ,
address TEXT
)
CHARACTER SET utf8 COLLATE utf8_general_ci ;
# Insert
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());
(
id => string '1' ( length = 3 )
name => string 'ZN Framework' ( length = 14 )
address => string 'Istanbul/Turkey' ( length = 17 )
)
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
Son eklenen verinin ID değerini verir.
Parametreler
return int |
Kullanımı
Users::insert
([
'name' => 'ZN Framework',
'address' => 'Istanbul/Turkey'
]);
output(Users::insertID());
# DuplicateCheck
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());
(
id => string '1' ( length = 3 )
name => string 'ZN Framework' ( length = 14 )
address => string 'Istanbul/Turkey' ( length = 17 )
)
# DuplicateCheckUpdate
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());
(
id => string '1' ( length = 3 )
name => string 'ZN Framework' ( length = 14 )
address => string 'Istanbul' ( length = 17 )
)
# Select
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);
(
id => string '1' ( length = 3 )
name => string 'ZN Framework' ( length = 14 )
)
# UpdateColumnName
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);
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
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());
(
id => string '1' ( length = 3 )
name => string 'ZN' ( length = 10 )
address => string 'Istanbul/Turkey' ( length = 17 )
)
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
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
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());
# RowColumnName
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('[email protected]') );
# ResultColumnName
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('[email protected]') );
# Result
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() );
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();
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
Tabloya kolon eklemek için kullanılır.
Parametreler
return this |
Kullanım
Users::address([DB::text()])->date([DB::datetime()])->add();
# Modify
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
return this |
Kullanım
Users::address([DB::varchar(500)])->date([DB::timestamp()])->modify();
# Rename
Tablodaki kolon ismini güncellemek için kullanılır.
Parametreler
return this |
Kullanım
Users::date(['adddate', DB::timestamp()])->rename();
# Drop
Tablodan kolon silmek için kullanılır.
Parametreler
return bool |
Kullanım
Users::address()->adddate()->drop;
# Get [6.0.6]
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() );