Birbiri ile ilişkili 3 tablom var. Adlarına Tablo1, Tablo2, Tablo3 diyelim.
İçlerinde aşağıdaki gibi.
Tablo1 = ID , TABLO2ID
Tablo2 = ID , TABLO3ID
Tablo3 = ID , ISIM
Tablo1 üzerinden gidiyorum ve ilişkiler şu şekilde.
'tABLO2' => array(self::BELONGS_TO, 'Tablo2 ', 'TABLO2ID')
Tablo2 ilişkisi
'tABLO3' => array(self::BELONGS_TO, 'Tablo3', 'TABLO3ID')
Normalde listelerken şu şekilde çağırdın zaman çalışıyor;
$criteria=new CDbCriteria;
$criteria->with = array('tABLO2');
$criteria->together = true;
return new CActiveDataProvider('Tablo1', array('criteria'=>$criteria,));
Model Tablo1 verileri olsun ve Yii nin standart "admin" sayfasındaki gridview ile listelendiğini düşünelim.
array('value'=>'$data->tABLO2->tABLO3->ISIM'),
Yani $model den okuyor -> "tABLO2" ilişki adını yazınca ilişkiye gidiyor, o ilişki üzerinde var olan diğer ilişkiyi çağırıyor, "tABLO3" ile o tablonun bağlı olduğu alanı getiriyor.
Böyle karmaşık bir yapı bu şekilde işleniyor ve sorun çıkmadan çalışıyor.
Benim 2 sorum var;
[color="#8B0000"]1.[/color] Yukarıdaki verdiğim örnekteki "admin" sayfasında çalışan örnek yine aynı çalışma mantığı olduğunu zannettiğim aşağıdaki "criteria" kodu
$criteria->compare('tABLO2.tABLO3.ISIM',$birdeger,true);
neden çalışmıyor olabilir ?
Verdiği hata da "tABLO2" devamı "Tablo3.ISIM" kısmı için, böyle bir tablo tanımlı değil diyor.
[color="#8B0000"]2.[/color] Tabloyu bulamadığı için kendim join ile eklemek istiyorum . İlişkili olarak daha evelden "with" ve "join" de beraber kullandığım, syntax yapısında da bir sorun çıkarmayan bir kod yapısı ile ekletiyorum. Kod ;
$criteria->join = 'LEFT JOIN Tablo3 ON tABLO2.TABLO3ID = Tablo3.ID';
Burada da sorun yok ancak sql çıktısana baktığımda, benim eklediğim "join" ilişkili gelen "with" in eklediği join cümlerinin başına geldiği için doğal olarak "tABLO2.TABLO3ID" yi tanımlıyamıyor. Bu sıralama hatasını nasıl giderebilirim ?
Not : Sıralama olarak zaten with in altında yazıyorum $criteria->join kodunu.