Nitelik Türleri
"ZN Framework 2011 senesinden beri geliştirilmeye devam etmektedir."
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(); # AUTOINCREMENT
DBForge::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 KEY
echo 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 KEY
echo 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(); # NULL
DBForge::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 NULL
DBForge::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(); # CONSTRAINT
DBForge::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();