php 无法通过API返回多级资源/集合

c9qzyr3d  于 2023-03-11  发布在  PHP
关注(0)|答案(1)|浏览(68)

问题:如何通过一个资源返回另一个资源的值?如果在两者之间有一个透视表(多对多关系),除了模型函数$this->hasMany(AnotherModel::class, 'pivottable')之外,是否还有其他更改?
例如:
有一个表叫做“tags”,还有一个表叫做“tagtranslations”
“tag”只有ID和时间戳“tagtranslations”有ID、tag_id、标题、slug和时间戳
有标记资源和标记翻译资源
在标记翻译资源中,我返回“toArray”

public function toArray($request)
    {
        return parent::toArray($request);
    }
}

在TagResource中我返回

return          
        [
            'id' => $this->id,
            'title' => TagTranslationResource::collection($this->title),
            'slug' =>  TagTranslationResource::collection($this->slug)
        ];

在Controller中,我使用tagtranslations回调Tag

public function index(Request $request)
    {

        $tags = Tag::with('tagtranslation')->get();
        //return $tags;

        return TagResource::collection($tags);
    }

例如,在TagResource I调用中

return [
  'title' => new TagResource($this->title),
  'slug'  => new TagResource($this->slug)
]

我在JSON API响应中只得到空字段
我得到的响应
'title' => TagTranslationResource::collection($this->title)
是一个错误“调用成员函数first()on null”
有人能解释一下这里发生了什么吗?:D我也尝试了TagResource::collection(TagTranslation::all())->$this->title
但不能转换为字符串

tjrkku2a

tjrkku2a1#

如果我理解正确的话,问题是:TagTranslationResource::collection()期望接收一个集合,而您只传递了 titleslug
我会怎么做:
主计长

public function index(Request $request)
{
  return TagResource::collection(
    Tag::with('tagtranslation')->get()
  );
}

标记资源:

return [ 
  'id' => $this->id,
  'any_other_tag_field' => $this->any_other_tag_field, 
  'tagtranslation' => TagTranslationResource::collection($this->tagtranslation),
];

标记翻译资源:

return [
  'title' => $this->title,
  'slug'  => $this->slug
]

如果您想了解更多信息,请参阅link of the official docs
here an article I wrote关于API资源的知识。
希望能帮到你。

相关问题