Yii 模型关系加入

Yii model relations join

  1. table 书籍
  2. table 作者
  3. table Authors_Category

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

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 字段排序时出现错误,col category_name 不存在。

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

正如 Yatin Mistry 指出的那样,您必须 eager load authors_category 才能正常工作。

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

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

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