2012-11-02 28 views
0

我有一個與子句中我的標準是這樣如何在yii活動記錄的with子句中添加條件?

$criteria2->with = array('subcat','adimages'); 

,但我確實需要有這樣SUBCAT是唯一的,但如果我將添加一個條件這樣

$criteria2 = new CDbCriteria(); 
$criteria2->select = '"t".USERID, "t".ADID ,"t".ADTYPE, "t".ADTITLE, "t".ADDESC, "t".PAGEVIEW, "t".DISPPUBLISHDATE,"t".SUBCATID'; 
$criteria2->addCondition("USERID IN (".implode(',',$uniqueuser).")"); 
$criteria2->addCondition("ADID IN (".implode(',',$uniquead).")"); 
// $criteria2->addCondition("SUBCATID IN(".implode(',',$uniquesubcat).")"); 
// $criteria2->compare("\"t\".SUBCATID", $this->SUBCATID); 
$criteria2->addCondition('DISPPUBLISHDATE >= CURRENT_DATE - 3 AND STATUS = 1 
     AND EXPIRYDATE >= CURRENT_DATE AND USERID IS NOT NULL'); 
$criteria2->addCondition('EXISTS (select 1 FROM {{ADIMAGES}} WHERE {{ADIMAGES}}.ADID = "t".ADID)'); 
$criteria2->order = '"t".PAGEVIEW DESC,"t".PUBLISHDATE DESC'; 
$criteria2->limit = 4; 
$criteria2->addCondition("\"subcat\".SUBCATID IN(".implode(',',$uniquesubcat).")");  
$criteria2->with = array('subcat','adimages'); 
$result2 = $this->findAll($criteria2); 
return $result2; 

正在一個定義ambigious柱的錯誤... 我如何設置SUBCAT關係是獨一無二的

$uniquesubcat arrray ? 
+1

另一個有用的問題關閉 – realtebo

回答

4

內儘量設置表的別名樣T他

$criteria2 = new CDbCriteria(); 
// SELECT 
$criteria2->select = 't.USERID, t.ADID, t.ADTYPE, t.ADTITLE, t.ADDESC, t.PAGEVIEW, t.DISPPUBLISHDATE, subcat.SUBCATID'; 
// JOIN 
$criteria2->with = array('subcat','adimages'); 
// WHERE 
$criteria2->compare('t.STATUS', 1); 
$criteria2->addCondition('t.DISPPUBLISHDATE >= CURRENT_DATE - 3'); 
$criteria2->addCondition('t.EXPIRYDATE >= CURRENT_DATE'); 
$criteria2->addCondition('t.USERID IS NOT NULL'); 
$criteria2->addCondition('EXISTS (select 1 FROM {{ADIMAGES}} as ADIMAGES WHERE ADIMAGES.ADID = t.ADID)'); 

$criteria2->addInCondition('t.USERID', $uniqueuser); 
$criteria2->addInCondition('t.ADID', $uniquead); 
$criteria2->addInCondition('subcat.SUBCATID', $uniquesubcat);  
// ORDER 
$criteria2->order = 't.PAGEVIEW DESC, t.PUBLISHDATE DESC'; 
// LIMIT 
$criteria2->limit = 4; 

$result2 = $this->findAll($criteria2); 
return $result2; 
+0

爲什麼你用比較? , – sasori

+0

這是一個例子 - 你在條件中使用相同的命名列,或者表中有相同的命名列,你需要指定你使用哪個表SUBCATID – Sergey

+0

它沒有幫助,得到相同的結果UID = 201087; AID = 626582; SID = 40; PVIEW = 7; UID = 201087; AID = 626581; SID = 113; PVIEW = 7; UID = 201140; AID = 626551; SID = 37; PVIEW = 7; UID = 201139; AID = 626550; SID = 113; PVIEW = 7; – sasori

0

我在這裏看到你正在試圖建立一個查詢條件的的CActiveRecord,但我認爲你應該記住,CDbCriteria->與用於預先加載,這意味着你將得到一個CActiveRecord對象,其中包含通過關係名稱在CDbCriteria-> with中指定的相關CActiveRecord。

因此,如果您正在尋找一個子卡,並且您熱切地加載所有子卡,應該對其進行過濾。

  1. 如果它是一個數組,您可以在$ models-> subcat上迭代。
  2. 您可以使用CDbCriteria的連接條件來替換條件。

我更喜歡第二種選擇。

$criteria2->join = "LEFT JOIN subcat s ON (s.SUBCATID = t.SUBCATID)" 

所以,你可以改變這一點:

$criteria2->addInCondition('subcat.SUBCATID', $uniquesubcat); 

$criteria2->addInCondition('s.SUBCATID', $uniquesubcat);  

總之,你可以使用join property of CDbCriteriasubcat一個別名,消除歧義您的查詢。

相關問題