2

我有两张桌子menuslang_menus. 我的Menus模型如下:

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

这意味着连接尚未发生。而正确的连接查询正在为计数值运行。难道我做错了什么 ?请帮忙。

4

2 回答 2

5

只需使用together()CActiveRecordtogetherCDbCriteria 的属性

$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;
于 2012-05-22T07:41:20.847 回答
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);
    }
于 2012-05-22T06:58:48.243 回答