İlgi Model Genişletmesi
"Basit bir konsol komutu ile projenin orijinal haline dokunmadan restorasyon çalışması yapabilirsiniz."
(ZN >= 5.3.5)
Birden fazla tablo birleştirme için tasarlanmış modeldir. Belirli tablolar arasında ilişki kurar. Bu ilişki sayesinde ortak veri çekme, güncelleme, silme gibi işlemler ilişkili tablolarda ortak gerçekleşir. Bir nevi join işleminin modelleştirilmiş halidir.
# Bölüm Başlıkları
# Relevance Model Dosyası Oluşturmak
# Farklı İlişki Seçimi
# Çoklu İlişki
# Varsayılan Tablo
# Varsayılan Select Deyimi
# Relevance Model Dosyası Oluşturmak
Bir modeli relevance haline getirmek için RelevanceModel dosyasının o sınıfa extends edilmesi gerekmektedir. Bu genişletmeden sonra birde const relevance sabiti ile ilişki kurulacak tabloların belirtilmesi gerekmektedir.
Kural | first_table.column:second_table.column [ => join_type = 'inner'] |
<?php
class InternalBlogCat extends RelevanceModel
{
const relevance =
[
'blog.category_id:category.id'
];
}
Yukarıdaki tanımlamada Blog ve Category tabloları arasında inner seviyesinde ilişki kurduk. Inner dışında ilişki tanımlaması yapmanızda mümkündür.
Eğer herhangi bir ilişki türü belirtilmezse varsayılan olarak inner join kabul edilir. Bunu değiştirmek için relevance sabitine yazılan birleştirme ifadesine değer olarak birleştirme türünü ekleyin.
<?php
class InternalBlogCat extends RelevanceModel
{
const relevance =
[
'blog.category_id:category.id' => 'left'
];
}
İstediğiniz sayıda tablo arasında ilişki kurabilirsiniz. Tek yapmanız gereken diğer ilişki ifadelerini diziye eklemenizdir.
<?php
class InternalBlogCat extends RelevanceModel
{
const relevance =
[
'blog.category_id:category.id' => 'left',
'category.id:comments.category_id' => 'right'
];
}
SELECT cols... FROM table deyimindeki table değeri relevance sabitine eklenen ilk tablo adıdır. Yani yukarıdaki örneğe göre bu blog tablosudur. Bu bilgi tablolar arasındaki ilişkiyi daha doğru yapmanızı sağlayacaktır.
Eğer select() belirtmezseniz varsayılan olarak tüm tabloların kolonları table_column formunda alınır. Böylece hiç bir select parametresi belirtmeseniz dahi ilişkili tablolara ait tüm kolonları bir birine çakışmadan yakalamış olursunuz.
# Relevance Model ile Gelen Yöntemler
RelevanceModel'i extends ettiğinizde model dosyanız bazı beceriler kazanır. Tüm select ve çıktılama yöntemleri ile birlikte özel olarak aşağıda verilmiş yöntemlerle verilerinizi kontrol edebilirsiniz.
Object | rowTableColumn() |
Bool | update() |
Bool | delete() |
Bool | repair() |
Bool | optimize() |
Bool | backup() |
Bool | status() |
Bool | drop() |
Bool | truncate() |
# Row / Result (ZN >= 5.3.5)
Oluştuğunuz model dosyanıza ait sonuçlara row(), result() veya diğer çıktılama yöntemlerini kullanarak ulaşabilirsiniz.
$row = BlogCat::row();
$result = BlogCat::result();
Row ve Result dışında veritabanının diğer çıktılama yöntemlerini de kullanabilirsiniz.
$resultArray = BlogCat::resultArray();
Tek satır kayıt alırken sadece 1 where yapısına mahsuz olmakla birlikte koşul kullanabilirsiniz.
Kural1 | rowTabloColumn($value, [$operator = '=']) |
Kural2 | rowDatabaseTabloColumn($value, [$operator = '=']) |
String | $value | Kolon değeri. |
String | $operator | Karşılaştırma operatörü. |
Return | Object |
Mesela Blog tablosunun Id kolonu 1 olan veriyi alalım.
$row = BlogCat::rowBlogId(1);
Category tablosunun Name kolonu 'ZN' olmayan veriyi alalım.
$row = BlogCat::rowCategoryName('ZN', '!=');
# Diğer Seçim Yöntemleri
Veritabanına ait groupBy(), orderBy(), limit() gibi diğer tüm yöntemleri kullanabilirsiniz.
BlogCat::orderBy('category.id', 'asc')->result();
# Update (ZN >= 5.3.5)
Birleştirilmiş tablolara ait verileri güncellemek için kullanılır.
BlogCat::where('blog.id', 5)->update(
[
'blog.name' => 'New Blog Name', 'category.name' => 'New Category Name'
]);
Koşullu update yöntemi kullanabilirsiniz.
Kural1 | updateTabloColumn($data, $value, [$operator = '=']) |
Kural2 | updateDatabaseTabloColumn($data, $value, [$operator = '=']) |
BlogCat::updateBlogId(
[
'blog.name' => 'New Blog Name', 'category.name' => 'New Category Name'
], 5);
# Delete (ZN >= 5.3.5)
Birleştirilmiş tablolara ait verileri silmek için kullanılır.
BlogCat::where('blog.id', 5)->delete();
Koşullu delete yöntemi kullanabilirsiniz.
Kural1 | deleteTabloColumn($value, [$operator = '=']) |
Kural2 | deleteDatabaseTabloColumn($value, [$operator = '=']) |
BlogCat::deleteBlogId(5);
# Diğer Yöntemler
Diğer yöntemlerin kullanımı aynıdır.
Void | |
Return | Mixed |
BlogCat::repair();
BlogCat::optimize();
BlogCat::backup();
BlogCat::status();
BlogCat::drop();
BlogCat::truncate();