Nitelik Türleri
"ZN Framework düzenlenebilir dizin yapısı ile kendi kod çatınızı oluşturmanıza imkan veren dünyadaki tek kod çatısıdır."
Bu bölümde veritabanı sürücülerine göre farklılık gösteren nitelik türlerinin nasıl hepsinde ortak kullanılacağını göstereceğiz. Aşağıda veri türlerinin veritabanı platformlarına göre değişimini gösteren tablo yer almaktadır.
| MySQL | Postgres | SQLite | SQLServer | ODBC | Oracle | 
| AUTO_INCREMENT | BIGSERIAL | AUTOINCREMENT | IDENTITY(1,1) | AUTOINCREMENT | CREATE SEQUENCE ... | 
| PRIMARY KEY | PRIMARY KEY | PRIMARY KEY | PRIMARY KEY | PRIMARY KEY | PRIMARY KEY | 
| FOREIGN KEY | FOREIGN KEY | FOREIGN KEY | FOREIGN KEY | FOREIGN KEY | FOREIGN KEY | 
| REFERENCES | REFERENCES | REFERENCES | REFERENCES | REFERENCES | REFERENCES | 
| UNIQUE | UNIQUE | UNIQUE | UNIQUE | UNIQUE | UNIQUE | 
| NULL | NULL | NULL | NULL | NULL | NULL | 
| NOT NULL | NOT NULL | NOT NULL | NOT NULL | NOT NULL | NOT NULL | 
| EXISTS | EXISTS | EXISTS | EXISTS | EXISTS | EXISTS | 
| NOT EXISTS | NOT EXISTS | NOT EXISTS | NOT EXISTS | NOT EXISTS | NOT EXISTS | 
| CONSTRAINT | CONSTRAINT | CONSTRAINT | CONSTRAINT | CONSTRAINT | CONSTRAINT | 
| DEFAULT | DEFAULT | DEFAULT | DEFAULT | DEFAULT | DEFAULT | 
| LIKE: % | LIKE: % | LIKE: % | LIKE: % | LIKE: * | LIKE: % | 
Yukarıdaki farklılıkları gidermek için bu nitelik türlerine göre yöntemler oluşturulmuştur. Bu yöntemlerin nasıl kullanılacağı ile ilgili bir örnek aşağıda verilmiştir.
# Yöntemler
Aşağıda DB:: kütüphanesinin nitelik türleri listelenmiştir.
# AutoIncrement
SQL AUTO_INCREMENT deyiminin karşılığıdır. Ancak yöntemin çıktısı yukarıdaki tabloya göre seçili veritabanı sürüsünün türüne göre değişiklik göstermektedir.
Parametreler
| return string | 
Kullanımı
echo DB::autoIncrement(); # AUTOINCREMENTDBForge::createTable('orders', 
[
    'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()]
]);
# PrimaryKey
SQL PRIMARY KEY deyiminin karşılığıdır.
Parametreler
| string $column = NULL | Kolon belirtilmesi durumunda onu da çıktılar. | 
| return string | |
Kullanımı
echo DB::primaryKey();     # PRIMARY KEYecho DB::primaryKey('id'); # PRIMARY KEY (id)DBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()] ]);
# ForeignKey
SQL FOREIGN KEY deyiminin karşılığıdır.
Parametreler
| string $column = NULL | Yabancı anahtar olarak belirtilen kolon bilgisi. | 
| string $references = NULL | Bu parametrenin belirtilmesi durumunda 1. parametre referans alınacak tablonun adını 2. parametre ise tablonun kolon bilgisini temsil eder. | 
| return string | |
Kullanımı
echo DB::foreignKey();           # FOREIGN KEYecho DB::foreignKey('personId'); # FOREIGN KEY (personId)[string $references]
2. parametrenin kullanılması durumunda REFERENCES column(id) kullanımı gibi de davranır.
echo DB::foreignKey('person', 'id'); # FOREIGN KEY (personId) REFERENCES person(id)DBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'personId' => [DB::int(11), DB::foreignKey('person', 'id')] ]);CREATE TABLE orders
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
personId INT(11),
FOREIGN KEY(personId) REFERENCES person(id)
)
# References
SQL REFERENCES deyiminin karşılığıdır.
echo DB::references('person', 'id'); # REFERENCES person(id)DBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'personId' => [DB::int(11), DB::foreignKey(), DB::references('person', 'id')] ]);
# Unique
SQL UNIQUE deyiminin karşılığıdır.
echo DB::unique(); # UNIQUE
# Null
SQL NULL deyiminin karşılığıdır.
echo DB::null(); # NULLDBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'surname' => [DB::varchar(200), DB::null()] ]);
# NotNull
SQL NOT NULL deyiminin karşılığıdır.
echo DB::notNull(); # NOT NULLDBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'email' => [DB::varchar(100), DB::notNull()], 'surname' => [DB::varchar(200), DB::null()] ]);
# Exists
SQL EXIST deyiminin karşılığıdır.
echo DB::exists('...DATA...'); # EXISTS(...DATA...)
# NotExists
MYSQL NOT EXISTS deyiminin karşılığıdır.
echo DB::notExists(); # NOT EXISTS
# Constraint
SQL CONSTRAINT deyiminin karşılığıdır.
echo DB::constraint(); # CONSTRAINTDBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'personId' => [DB::int(11), DB::constraint(), DB::foreignKey(), DB::references('person', 'id')] ]);
# DefaultValue
MYSQL DEFAULT deyiminin karşılığıdır.
echo DB::defaultValue(10); # DEFAULT(10)DBForge::createTable('orders', [ 'id' => [DB::int(11), DB::primaryKey(), DB::autoIncrement()], 'email' => [DB::varchar(100), DB::notNull()], 'surname' => [DB::varchar(200), DB::null(), DB::defaultValue('Your surname')] ]);
# Like
SQL LIKE deyiminin karşılığıdır. Ancak yöntemin çıktısı yukarıdaki tabloya göre seçili veritabanı sürüsünün türüne göre değişiklik göstermektedir.
Parametreler
| string $data | Aranacak dizge. | |
| string $type = 'starting' | Aramanın türü. | |
| starting | ... ile başlayan | |
| inside | ... içinde geçen ... | |
| ending | ile biten .... | |
| return string | ||
Kullanımı
echo DB::like('search', 'inside');   # %search%
echo DB::like('search', 'starting'); # search%
echo DB::like('search', 'ending');   # %search $persons = DB::where('name like', DB::like('ozan', 'starting'))->persons();Ya da
$persons = DB::whereStartLike('name', 'ozan')->persons(); # options[Like|StartLike|EndLike]
# Between
SQL BETWEEN value AND value deyiminin karşılığıdır.
Parametreler
| string $value1 | Karşılaştırılacak 1. değer. | 
| string $value2 | Karşılaştırılacak 2. değer. | 
| return string | |
Kullanımı
$persons = DB::where('id between', DB::between(1, 2))->persons();Ya da
$persons = DB::whereBetween('id', 20, 50)->persons(); 
# In
SQL IN('val1', 'val2') deyiminin karşılığıdır.
Parametreler
| string ...$values | Sıralı parametrik değerler. | 
| return string | |
Kullanımı
$persons = DB::where('city in', DB::in('London', 'Istanbul'))->persons();
echo $persons->stringQuery();Ya da
$persons = DB::whereIn('city', ['London', 'Istanbul'])->persons(); 
# intable
SQL IN(SELECT * FROM TABLE) deyiminin karşılığıdır.
Parametreler
| string ...$values | Sıralı parametrik değerler. | 
| return string | |
Kullanımı
$persons = DB::where('id in', DB::inTable('orders'))->persons();
echo $persons->stringQuery();Ya da
$persons = DB::whereInTable('id', 'orders')->persons(); 
# InQuery
SQL IN(SELECT * FROM TABLE) deyiminin karşılığıdır.
Parametreler
| string ...$values | Sıralı parametrik değerler. | 
| return string | |
Kullanımı
$persons = DB::where('id in', DB::inQuery(DB::string()->orders()))->persons();
echo $persons->stringQuery();Ya da
$persons = DB::whereInQuery('id', DB::string()->orders())->persons(); 
# NotIn
SQL NOT IN(...) deyiminin karşılığıdır.
Parametreler
| string ...$values | Sıralı parametrik değerler. | 
| return string | |
Kullanımı
$persons = DB::where('id not in', DB::notIn(1, 3, 5))->persons();
echo $persons->stringQuery();Ya da
$persons = DB::whereNotIn('id', [1, 3, 5])->persons(); 
 
						