Php Yii活动记录在不同表的命名作用域中添加多个条件

Php Yii活动记录在不同表的命名作用域中添加多个条件,php,activerecord,yii,Php,Activerecord,Yii,我试图设置一个条件,即客户端ID必须与客户端ID匹配,并且locations表中的region字段必须与附加到与用户位置关联的location ID的region匹配 所以我有三张桌子。当前表(t1),表relation1指的是(t2),表t2指的是关系2中的表(我们称之为t3) $this->getDbCriteria()->mergeWith(数组( '与'=>$rel, '条件'=>'关系1.客户端id=:客户端id和 relation1.relation2.region=:region'

我试图设置一个条件,即客户端ID必须与客户端ID匹配,并且locations表中的region字段必须与附加到与用户位置关联的location ID的region匹配

所以我有三张桌子。当前表(t1),表relation1指的是(t2),表t2指的是关系2中的表(我们称之为t3)

$this->getDbCriteria()->mergeWith(数组( '与'=>$rel, '条件'=>'关系1.客户端id=:客户端id和 relation1.relation2.region=:region',, 'params'=>数组(':client\u id'=>$client\u id',:region'=>$region), )); 退还$this; Relation1是从表中删除后表中的关系。relation1引用的表有一个名为relation2的关系,该关系将我带到需要检索区域值的位置

如果我删除第二个条件和参数,它就会工作,因此我知道relation1正在工作,relation2在其他上下文中也工作。如果他们想看的话,就在这里

public function relations() { return array( 'relation1' => array(self::BELONGS_TO, 't2', 't2_id'), ); } 公共职能关系() { 返回数组( 'relation1'=>数组(self::属于't2','t2\u id'), ); } 及

公共职能关系() { 返回数组( 'relation2'=>数组(self::属于't3','t3\u id'), ); }
我真的觉得这应该行得通。有什么帮助吗?

我从另一个网站得到了答案。如果您感兴趣,解决方案是:

$this->getDbCriteria()->mergeWith(array( 'with' => array( 'relation1' => array( 'condition' => 'relation1.column = :column_id', 'params' => array(':column_id'=>$column_id)), 'relation1.relation2' => array( 'condition' => 'relation2.column2 = :column2', 'params' => array(':column2'=>$column2)) ), )); return $this; $this->getDbCriteria()->mergeWith(数组( '带'=>数组( 'relation1'=>数组( '条件'=>'关系1.column=:column\u id', 'params'=>array(':column\u id'=>$column\u id)), 'relation1.relation2'=>数组( '条件'=>'关系2.column2=:column2', 'params'=>array(':column2'=>$column2)) ), )); 退还$this;
谢谢你的帮助

我可能错了,但我想这正是我报告的bug的情况。查看那里的简易修复程序,如果它对您有帮助,请尝试。如果是的话,那就是一个bug,你应该等到1.1.11版本发布并修复它。我尝试了你的补丁,但没有用。谢谢你的回复。还有其他想法吗?我得到的错误是找不到relation1.relation2.region列,但我不知道如何以其他方式将其定位。请尝试relation2.region=:region?没有关系是的我也试过好几次了。。。 public function relations() { return array( 'relation2' => array(self::BELONGS_TO, 't3', 't3_id'), ); } $this->getDbCriteria()->mergeWith(array( 'with' => array( 'relation1' => array( 'condition' => 'relation1.column = :column_id', 'params' => array(':column_id'=>$column_id)), 'relation1.relation2' => array( 'condition' => 'relation2.column2 = :column2', 'params' => array(':column2'=>$column2)) ), )); return $this;