Php 使用findAll时,Yii AR join不起作用

Php 使用findAll时,Yii AR join不起作用,php,yii,Php,Yii,我有两个表菜单和语言菜单。我的菜单型号如下: 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(

我有两个表
菜单
语言菜单
。我的
菜单
型号如下:

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);
    }
这将抛出错误
未知列“menulanguages.languageId”
。 错误在
$menus=menus::model()->with('menulalanguages')->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
这意味着连接尚未发生。而正在为计数值运行正确的联接查询。我做错什么了吗?
请帮忙。

试试这个。。在CDBC标准中应用联接表

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);
    }
仅使用或:

或:


它不起作用。显示相同的SQL错误。查询仍然是相同的。它也应该是
$criteria->with='menulalanguages'
试试这个$条件->带=数组('menulanguages');我用bool.dev的解决方案解决了这个问题。但仍然无法确定如何在视图中打印联接表字段的值。我尝试了
echo$menu->name
echo$menu->menulalanguages->name
,但它不起作用。但是,在对结果对象执行var_转储时,我可以看到name的值(第二个表中的一个字段)。很抱歉打扰您@bool.dev,但是如何显示从第二个表中获得的数据?我尝试了
echo$menu->name
echo$menu->menulalanguages->name
,但它不起作用。但是在对结果对象执行var_转储时,我可以看到
name
(第二个表中的一个字段)的值。$menu是一个菜单对象数组,每个菜单对象都有相关的menulalanguages对象,因此您必须执行
echo$result['menus'][0]->menulalanguages[0]->name完美。。你太棒了;)
$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;