Yii Active Record在不同表的命名范围中添加多个条件

时间:2012-04-10 21:58:53

标签: php activerecord yii

我试图提出一个条件,即客户端ID必须与客户端ID匹配,且locations表中的region域必须与附加到与用户位置关联的位置ID的区域匹配。

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


    $this->getDbCriteria()->mergeWith(array(
        'with' => $rel,
        'condition'=>'relation1.client_id=:client_id AND
                      relation1.relation2.region=:region',
        'params'=>array(':client_id'=>$client_id, ':region'=>$region),
    ));

return $this;

Relation1是从该表中删除后的表中的关系。 relation1引用的表有一个名为relation2的关系,它将我带到需要检索区域值的位置。

如果我删除它的第二个条件和参数,那么我知道relation1正在工作,而relation2也适用于其他上下文。他们在这里是否愿意看到他们。


    public function relations()
    {
        return array(
            'relation1' => array(self::BELONGS_TO, 't2', 't2_id'),
        );
    }


    public function relations()
    {
        return array(
            'relation2' => array(self::BELONGS_TO, 't3', 't3_id'),
             );
    } 

我觉得这应该有用。有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

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


    $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;

感谢您的帮助!