Yii Framework Forum: CDbCriteria - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

CDbCriteria with ve join

#1 User is offline   alper 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 12-November 10

Posted 01 July 2011 - 05:00 AM

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;

1. 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.

2. 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.
0

#2 User is offline   alper 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 12-November 10

Posted 01 July 2011 - 06:30 AM

Mantık sıralaması olarak şu şekildeymiş;
Önce kendi içersindeki cümleleri alıp SQL başına ekliyor sonra ilişkilere geçiyormuş.

Bu yüzden bağlamak için uraştığım join cümlesini tablo1'in miş gibi değilde tablo2'nin join cümlesiymiş gibi göstermek için scope kullandım.

Tablo2 model :
public function scopes()
{
return array(
'scopebaglanti'=>array('join'=> 'LEFT JOIN Tablo3 ON tABLO2.TABLO3ID = Tablo3.ID'),);
}


Tablo1 in içerisindeki with kodu da şu şekilde değişti;
$criteria->with = array('tABLO2:scopebaglanti');


Tabi bu scope'u içerisinde 'tABLO2' adlı relationı olmadan çağırırsanız join cümlesindeki ilişki adını bulamicağı için hata vericektir.

Böylelikle birçok konuya değinmişde oldum. Umarım başkalarına örnek teşkil ediyordur. :)
0

#3 User is offline   tebessum 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 17-December 10

Posted 30 October 2011 - 03:41 PM

Teşekkürler
0

#4 User is offline   Cihan Ozturk 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 02-June 10
  • Location:İstanbul

Posted 04 November 2011 - 04:47 AM

teşşekürler kardeş güzel paylaşım :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users