2012-05-22 24 views
2

我有兩個表menuslang_menus。我Menus模型如下:當使用findAll時Yii AR加入不工作

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(
       'menulanguages'=>array(self::HAS_MANY, 'MenuLangs', 'menuId'), 
    ); 
} 
... 
public function getMenus(){ 
     $criteria = new CDbCriteria(); 
     $criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND menulanguages.languageId = ".Yii::app()->user->userlanguage; 


     $count = Menus::model()->with('menulanguages')->count($criteria); 

     $pages=new CPagination($count); 
     //Results per page 
     $pages->pageSize=10; 
     $pages->applyLimit($criteria); 

     $menus = Menus::model()->with('menulanguages')->findAll($criteria); 
     return array('menus' => $menus, 'paging' => $pages); 
    } 

這是引發錯誤Unknown column 'menulanguages.languageId'。 錯誤在線$menus = Menus::model()->with('menulanguages')->findAll($criteria);

令人驚訝的是,我正確地獲得了變量$count的值。

在查看日誌,我可以看到正在運行的查詢的findAll SQL查詢是:

SELECT `t`.`id` AS `t0_c0`, `t`.`clientId` AS `t0_c1`, `t`.`restaurantId` AS `t0_c2` FROM `posif_menus` `t` WHERE (t.clientId = 1 AND menulanguages.languageId = 2) LIMIT 10 

這意味着加入並沒有發生。鑑於正確的連接查詢正在運行計數值。難道我做錯了什麼 ? 請幫忙。

回答

5

只需使用together() of CActiveRecordtogether property of CDbCriteria

$menus = Menus::model()->with('menulanguages')->together()->findAll($criteria); 

或:

$criteria = new CDbCriteria(); 
$criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND menulanguages.languageId = ".Yii::app()->user->userlanguage; 
$criteria->together=true; 
+0

這應該工作.. –

+1

謝謝。它運作良好。 – ajaybc

+0

很樂意幫忙... –

2

試試這個..加盟申請表中cdbcriteria ..

public function getMenus(){ 
     $criteria = new CDbCriteria(); 
     $criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND            menulanguages.languageId = ".Yii::app()->user->userlanguage; 
     $criteria->with = array('menulanguages'); 

     $count = Menus::model()->count($criteria); 

     $pages=new CPagination($count); 
     //Results per page 
     $pages->pageSize=10; 
     $pages->applyLimit($criteria); 

     $menus = Menus::model()->findAll($criteria); 
     return array('menus' => $menus, 'paging' => $pages); 
    } 
+0

這是行不通的。顯示相同的SQL錯誤。查詢仍然是一樣的。也應該是'$ criteria-> with ='menulanguages'' – ajaybc

+1

試試這個.. $ criteria-> with = array('menulanguages'); –

+0

我得到它與bool.dev的解決方案。但仍然不知道如何在視圖中打印連接表的字段的值。我嘗試'echo $ menu-> name'和'echo $ menu-> menulanguages-> name',但它不起作用。但是我能夠在結果對象上看到name(這是第二個表中的一個字段)的值。 – ajaybc