Yii模型关系加入

时间:2015-04-27 13:37:24

标签: php mysql yii datagridview

  1. table Books
  2. 表作者
  3. 表Authors_Category
  4. Books模型中有关系:

        public function relations()
        {
            return array(
                'authors' => array(self::BELONGS_TO, 'Authors', array('author_id'=>'id')),
        }
    

    Authors

        public function relations()
        {
            return array(
                'authors_category' => array(self::BELONGS_TO, 'Authors_Category', array('author_cat'=>'id')),
        }
    

    Books DataGridView我可以访问Authors_Category字段

    $data->authors->authors_category->category_name

    但问题在于排序Authors_Category colums

    Books模型中,我有排序规则:

        return new CActiveDataProvider(
            new FraudAlerts(),
            array(
                'criteria'=>$criteria,
                'sort'=>array(
                    'attributes'=>array(
                        'category_name'=>array(
                            'asc'=>'Authors_Category.category_name',
                            'desc'=>'Authors_Category.category_name DESC',
                        ),
                    )
                )
            )
        );
    

    当我尝试按Authors_Category fiels排序时,我收到错误,col category_name不存在。

    Books模型中我的关系有什么问题?

1 个答案:

答案 0 :(得分:2)

正如Yatin Mistry指出的那样,你必须eager load authors_category才能发挥作用。

Yii允许您使用with加载嵌套关系,因此可以按如下方式完成:

$criteria->with = array(
    'authors.authors_category' => array('select' => array('category_name', 'id'))
);

select限制通过查询加载的字段以提高性能。如果您希望加载Authors_Category中的所有字段,只需将其删除即可。