Yii Activerecord不与嵌套关系连接

时间:2013-03-13 20:00:57

标签: php yii

我在Yii中定义了以下条件,并尝试使用它来获取客户数组。

$criteria = new CDbCriteria(array(
        "condition"=>"hidden = 0".(Yii::app()->user->GetState('is_admin') ? "" : " AND franchisesMunicipalities.franchise_id=".Yii::app()->user->getState('fid')),
        "with" => array('municipality','municipality.franchisesMunicipalities')
));
$customers = Customers::model()->findAll($criteria);

这(我认为)应该导致Yii加入表Customersities表,然后在同一个查询中加入表Municipalities与表Franchises_MUNicipalities。但是它不起作用,因为它没有加入特许经营市场。

结果查询是

SELECT `t`.`id`                   AS `t0_c0`, 
   `t`.`municipality_id`      AS `t0_c1`, 
   `t`.`personal_code_number` AS `t0_c2`, 
   `t`.`name`                 AS `t0_c3`, 
   `t`.`adress`               AS `t0_c4`, 
   `t`.`zip`                  AS `t0_c5`, 
   `t`.`phone`                AS `t0_c6`, 
   `t`.`mobile`               AS `t0_c7`, 
   `t`.`email`                AS `t0_c8`, 
   `t`.`hidden`               AS `t0_c9`, 
   `municipality`.`id`        AS `t1_c0`, 
   `municipality`.`county_id` AS `t1_c1`, 
   `municipality`.`name`      AS `t1_c2` 
FROM   `customers` `t` 
   LEFT OUTER JOIN `municipalities` `municipality` 
                ON ( `t`.`municipality_id` = `municipality`.`id` ) 
WHERE  ( hidden = 0 
     AND municipality.franchisesmunicipalities.franchise_id = 7 ) 
LIMIT  30 

正如你所看到的那样,它只会加入一个关系。应该正确定义模型中的关系,因为我能够在其他环境中使用它们。

为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

根据http://www.yiiframework.com/doc/api/1.1/CActiveRecord#with-detail我相信你应该这样做:

$criteria = new CDbCriteria(array(
        "condition"=>"hidden = 0".(Yii::app()->user->GetState('is_admin') ? "" : " AND franchisesMunicipalities.franchise_id=".Yii::app()->user->getState('fid'))
));
$customers = Customers::model()->with('municipality','municipality.franchisesMunicipalities')->findAll($criteria);

希望这适合你。