Yii2 中 extraFields 如何控制 hasMany 的输出数据 [ 2.0 版本 ]
//POST模型
public function fields()
{
return [
'id', 'title', 'content', 'views_count', 'comments_count', 'favorites_count'
];
}
public function extraFields()
{
return [
'creator' => function ($model) {
return [
'id' => $model->creator->id,
'username' => $model->creator->username,
'avatar' => $model->creator->getFullAvatar()
];
},
'forum' => function ($model) {
return [
'id' => $model->forum->id,
'name' => $model->forum->name
];
},
'comments' => function ($model) {
return [
//一对多如何返回指定的字段,
];
},
];
}
//POST控制器
public function actionView($id)
{
$model = Post::find()->where(['id' => $id])->one();
$data = $model->toArray([], ['creator', 'forum', 'comments']);
return $data;
}
因为要做 API,需要在访问 url 的时候就输出数据和其关联的相关数据:
尝试一对一 hasOne 可以指定输出关联模型的指定字段,这个没什么问题。
但是一对多 hasMany
的情况下如何去输出指定字段的数据呢?需要在 return 里面 foreach 吗?
我想关联输出 comments 的 'title','content','user_id'
字段,以及其 comments.creator
的 'id', 'username', 'avatar'
数据
最佳答案
-
ActiveRecord fields() 和 extraFields() 内能直接使用关系名称。以你的例子为例,'creator', 'forum' 和 'comments' 都是 Post 的关系名称,可以像表格列名(attribute)那样直接使用:
// Post Model public function fields() { return [ 'title', 'content', ..., 'creator' => function ($model) { return [ 'id' => $model->creator->id, 'username' => $model->creator->username, 'avatar' => $model->creator->getFullAvatar() ]; }, 'forum' => function ($model) { return [ 'id' => $model->forum->id, 'name' => $model->forum->name ]; }, // 直接返回关系名称 'comments' ]; }
然后在 Comment 模型的 fields() 内进一步指定所需的 fields:
// Comment Model public function fields() { return [ 'title', 'content', 'creator' => function ($model) { return [ 'id' => $model->creator->id, 'username' => $model->creator->username, 'avatar' => $model->creator->getFullAvatar() ]; }, ]; }
通过
posts/1
就能获取所有所需的信息。共 1 条回复
mydzoo
注册时间:2017-01-05
最后登录:2022-03-29
在线时长:53小时40分
最后登录:2022-03-29
在线时长:53小时40分
- 粉丝4
- 金钱2075
- 威望10
- 积分2705