Yii CDbCriteria从另一个相关对象的相关对象中选择一个字段

时间:2013-11-07 16:27:23

标签: php mysql activerecord orm yii

您好我需要创建一个具有更复杂关系的CDbCriteria查询。

Table1与表2有HAS_ONE的关系 - 我们称之为Relation1

表2与表3有HAS_ONE的关系 - 我们称之为Relation2

Table3有我想要的Field让我们称之为Field2

$ this指的是Table1的类,我定义了

class Table1 extends ActiveRecord {

    public $Field1; // so I can do a search on it

    ...

    public function mySearch()
    {
        $criteria = new CDbCriteria;

        //I need to do sth like this:
        $criteria->compare('Relation1.Relation2.Field2',$this->Field1);


        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }
}

但是我得到了一个错误,

未找到列:1054'where子句'中的未知列'Relation1.Relation2.Field2'

任何想法如何解决?我不想写自己的联接,我想以ORM的方式来做。

1 个答案:

答案 0 :(得分:1)

使用此:

class Table1 extends ActiveRecord {

    public $Field1;

    public function mySearch()
    {
        $criteria = new CDbCriteria;
        $criteria->with = array(
             'relation_to_table2', 
             'relation_to_table2.relation_to_table3'
        );
        $criteria->compare('relation_to_table3.Field2',$this->Field1);

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }
}