mydzoo

mydzoo

这家伙有点懒,还没写个性签名!

  • 财富值2075
  • 威望值10
  • 总积分2705

个人信息

  • 2019-07-15 已签到
    连续签到1天,获得了5个金钱
  • 2019-07-13 已签到
    连续签到7天,获得了20个金钱
  • 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方法,由于命名空间的问题导致无法关联出想要的信息。

  • 2019-07-11 已签到
    连续签到5天,获得了20个金钱
  • 2019-07-10 已签到
    连续签到4天,获得了20个金钱
  • 回复了 的说说
    发现很多代码里都喜欢用双引号和model里用find不指定field,咳咳我就不点名了
    求助:https://www.yiichina.com/question/4299
  • 发表了说说
    Yii2中extraFields如何控制hasMany的输出数据。 https://www.yiichina.com/question/4299
  • 赞了话题
    打标签插件 Tagify 介绍
总监 等级规则
2705/5000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

2

Ta的粉丝

4

Ta的访客

30