mydzoo
- mydzoo 2019-07-15 已签到连续签到1天,获得了5个金钱
- mydzoo 2019-07-13 已签到连续签到7天,获得了20个金钱
- mydzoo 2019-07-12 已签到连续签到6天,获得了20个金钱
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
就能获取所有所需的信息。经过尝试,这样的写法是正确的。也找到问题所在:因为我在基类model写了hasOne和hasMany关联关系。在API的model里面继承之后,在Api的model里面写fields和extraFields方法,由于命名空间的问题导致无法关联出想要的信息。
- mydzoo 2019-07-11 已签到连续签到5天,获得了20个金钱
- mydzoo 2019-07-10 已签到连续签到4天,获得了20个金钱
- mydzoo 发表了说说Yii2中extraFields如何控制hasMany的输出数据。 https://www.yiichina.com/question/4299