在here中,我想将关系数据放入我的API资源中。
使用一个键和一个关系,它可以正常工作。 但是,使用两个不同键和两个相同关系,就不会。
我的目标是:
带有一个名为“ comments”的键的“ Post”对象,当加载“ comments”关系时。 (有效)
带有两个键“ comments”和“ comments”的“ Post”对象。当加载“评论”关系时创建第一个“评论”,当加载“ comments_by_tag”关系时创建第二个“评论”。
然后,我以“评论”关系加载“发布”(失败)。 并加载“ comments_by_tag”关系(有效)。
然后,我以“评论”关系加载“帖子”(有效)。 并加载“ comments_by_tag”关系(失败)。
这是我在
上的代码return [
'comments' => CommentItem::collection($this->whenLoaded('comments')),
'comments' => CommentItem::collection($this->whenLoaded('comments_by_tag')),
];
答案 0 :(得分:0)
只需检查whenLoaded
方法的值。
whenLoaded
方法将返回null。
if ($comments = $this->whenLoaded('comments')) {
return ['comments' => $comments]
} else if ($commentsByTag = $this->whenLoaded('comments_by_tag')) {
return ['comments' => $commentsByTag];
}
答案 1 :(得分:0)
不那么优雅,但是可以满足您的需求。 ->relationLoaded(relationName)
检查是否已加载。
return [
'comments' => $this->when(
$this->relationLoaded('comments')
|| $this->relationLoaded('comments_by_tag'),
function () {
return CommentItem::collection(
$this->relationLoaded('comments')
? $this->comments
: $this->comments_by_tag
);
}
),
];