Yii 模型关系加入
Yii model relations join
- table 书籍
- table 作者
- 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
中的所有字段,只需将其删除即可。
- table 书籍
- table 作者
- 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
中的所有字段,只需将其删除即可。