问题:如何通过一个资源返回另一个资源的值?如果在两者之间有一个透视表(多对多关系),除了模型函数$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
但不能转换为字符串
1条答案
按热度按时间tjrkku2a1#
如果我理解正确的话,问题是:TagTranslationResource::collection()期望接收一个集合,而您只传递了 title 和 slug。
我会怎么做:
主计长
标记资源:
标记翻译资源:
如果您想了解更多信息,请参阅link of the official docs
和here an article I wrote关于API资源的知识。
希望能帮到你。