Мне нужна ваша помощь!
У меня проблемы с возвратом информации сводной таблицы при использовании ApiResources .
Если у меня есть такая модель:
Post.php
public function likes()
{
return $this->belongsToMany(Like::class)
->withPivot(['points']) // I want this in my PostResource::collection !
}
При определении ресурсов:
LikeResource.php
public function toArray($request)
{
return [
'like_field' => $this->like_field
];
}
PostResource.php
public function toArray($request)
{
return [
'title' => $this->title,
'likes' => LikeResource::collection($this->whenLoaded('likes'))
];
}
Затем в PostController.php
return PostResource::collection(Post::with('likes')->get())
Будет возвращено что-то вроде этого:
Ответ контроллера
[
{
'title' => 'Post 1'
'likes' => [
{
'like_field' => 'Test'
},
{
'like_field' => 'Test 2'
}
]
},
{
'title' => 'Post 2',
...
}
]
Проблема в том, что при использовании LikeResource::collection()
он не добавляет сводную информацию.Как я могу добавить 'points' сводной таблицы при определении этого PostResource ??
Thats all, Thx!
Solution
Ну, просто читая немного в Документах Laravel , чтобы вернуть сводную информацию, вам просто нужно использовать метод $this->whenPivotLoaded()
Итак, PostResource становится:
public function toArray($request)
{
return [
'title' => $this->title,
'likes' => LikeResource::collection($this->whenLoaded('likes')),
'like_post' => $this->whenPivotLoaded('like_post', function() {
return $this->pivot->like_field;
})
];
}