İlgi Model Genişletmesi


    × Bunları biliyor muydunuz?
"Başlangıç dosya ve kontrolcüleri üzerinden tüm kontrolcü ve görünümlere veri gönderilebilir."


(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 ile Gelen Yöntemler

 

 

# 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']
Dosya: Models/BlogCat.php
<?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.

Farklı İlişki Seçimi

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.

Dosya: Models/BlogCat.php
<?php

class InternalBlogCat extends RelevanceModel
{
    const relevance = 
    [
        'blog.category_id:category.id' => 'left'
    ];
}
Çoklu İlişki

İstediğiniz sayıda tablo arasında ilişki kurabilirsiniz. Tek yapmanız gereken diğer ilişki ifadelerini diziye eklemenizdir.

Dosya: Models/BlogCat.php
<?php

class InternalBlogCat extends RelevanceModel
{
    const relevance = 
    [
        'blog.category_id:category.id'     => 'left',
        'category.id:comments.category_id' => 'right'
    ];
}
Varsayılan Tablo

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.

Varsayılan Select Deyimi

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();
Diğer Çıktılama Yöntemleri

Row ve Result dışında veritabanının diğer çıktılama yöntemlerini de kullanabilirsiniz.

$resultArray = BlogCat::resultArray();
Özel Row Kullanımı

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 = '='])
Parametreler
String $value Kolon değeri.
String $operator Karşılaştırma operatörü.
Return Object
Kullanımlar

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'
]);
Özel Update Kullanımı

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();
Özel Delete Kullanımı

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.

Parametreler
Void
Return Mixed
Kullanımlar
BlogCat::repair();
BlogCat::optimize();
BlogCat::backup();
BlogCat::status();
BlogCat::drop();
BlogCat::truncate();