Eager Load Pivot во вложенных BelongsToMany с ресурсом Api - PullRequest
1 голос
/ 17 мая 2019

Мне нужна ваша помощь!

У меня проблемы с возвратом информации сводной таблицы при использовании 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;
        })
    ];
}
...