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

Posted

技术标签:

【中文标题】Yii CDbCriteria 从另一个相关对象中选择一个相关对象的字段【英文标题】:Yii CDbCriteria select a field from a related object from another related object 【发布时间】:2013-11-07 16:27:23 【问题描述】:

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

Table1 与 Table2 有一个关系 HAS_ONE - 我们称之为 Relation1

Table2 与 Table3 有一个关系 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'

任何想法如何解决它?我不想写自己的join,我想用ORM的方式。

【问题讨论】:

【参考方案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,
        ));
    

【讨论】:

这不起作用。与 Table3 的关系在 table2 模型中定义,WITH 属性在 Table1 中搜索此关系,但没有找到。 那个工作:) 我不知道我可以写一个带有相关表的条件。谢谢

以上是关于Yii CDbCriteria 从另一个相关对象中选择一个相关对象的字段的主要内容,如果未能解决你的问题,请参考以下文章

Yii CDbCriteria类中方法

加入 Yii 类 CDBCriteria?

Yii CDbCriteria() 的使用方法/属性

Yii CDbCriteria() 的使用方法/属性

Yii框架:Clistview报告的结果数量不正确

Yii2 : Active Record 添加 Not In 条件