【问题标题】:Yii Active Record adding multiple conditions in named scopes from different tablesYii Active Record 在不同表的命名范围内添加多个条件
【发布时间】:2026-02-03 03:45:02
【问题描述】:

我正在尝试设置一个条件,即客户端 ID 必须与客户端 ID 匹配,并且位置表中的区域字段必须与附加到与用户位置关联的位置 ID 的区域匹配。

所以我有 3 张桌子。当前表(t1),表relation1引用(t2),以及t2在relation2中引用的表(我们称之为t3)。

$this->getDbCriteria()->mergeWith(数组( 'with' => $rel, '条件'=>'relation1.client_id=:client_id AND 关系1.关系2.区域=:区域', 'params'=>array(':client_id'=>$client_id, ':region'=>$region), )); 返回$这个;

Relation1 是表中从该表中删除后的关系。关系 1 引用的表有一个名为关系 2 的关系,它可以让我到达需要检索区域值的位置。

如果我删除第二个条件和参数,它就可以工作,所以我知道关系 1 正在工作,而关系 2 也可以在其他情况下工作。如果他们想见他们,就在这里。

公共职能关系() { 返回数组( 'relation1' => 数组(self::BELONGS_TO, 't2', 't2_id'), ); }

公共职能关系() { 返回数组( 'relation2' => 数组(self::BELONGS_TO, 't3', 't3_id'), ); }

我真的觉得这应该可行。有什么帮助吗?

【问题讨论】:

  • 我可能错了,但我想这正是我在Yii github repository 上报告的错误的情况。看看那里的简单修复,试试它是否对你有帮助。如果是这样,那么这是一个错误,您应该等待 1.1.11 出来并修复它。
  • 我试过你的补丁没有用。感谢您的回复。还有其他想法吗?我得到的错误是找不到 relation1.relation2.region 列,但我不知道如何以其他方式定位它。
  • 试试 relation2.region=:region 吗?没有关系1。
  • 是的,我也试过好几次...

标签: php activerecord yii


【解决方案1】:

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

$this->getDbCriteria()->mergeWith(数组( '与' => 数组( 'relation1' => 数组( '条件' => 'relation1.column = :column_id', 'params' => array(':column_id'=>$column_id)), 'relation1.relation2' => 数组( '条件' => 'relation2.column2 = :column2', '参数' => 数组(':column2'=>$column2)) ), )); 返回$这个;

感谢您的帮助!

【讨论】: