Laravel ресурс - получить данные из отношения - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь использовать ресурсы и коллекцию Laravel для создания небольшого API.

Я хотел бы восстановить все сообщения категорий

Мои отношения на моем модель:

/*
|--------------------------------------------------------------------------
| RELATIONS
|--------------------------------------------------------------------------
*/
public function posts()
{
    return $this->belongsToMany(Post::class, 'post_category');
}

Контроллер категорий:

public function index()
{
    $categories = Category::all();

    return (new CategoryCollection(CategoryResource::collection($categories)));
}

Моя категорияРесурс:

public function toArray($request)
{
    return [
        'id'   => $this->id,
        'name' => $this->name,
        'slug' => $this->slug
    ];
}

Моя коллекция категорий

public function toArray($request)
{
    return [
        'data' => $this->collection,
        'posts' => PostResource::collection($this->whenLoaded('posts')),
    ];
}

Я пытаюсь восстановить посты категории в первую очередь. Когда я выполняю следующую команду, я получаю сообщение об ошибке: Метод ... RelationsLoaded не существует

'posts' => PostResource::collection($this->whenLoaded('posts'))

Что я не понял?

Я также создал два файла PostCollection и PostResource (basi c, я не изменял их)

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

Ответы [ 2 ]

1 голос
/ 16 января 2020
public function index()

{
    $categories = Category::all();

    return (CategoryResource::collection($categories));
}

это может помочь, попробуйте это

, и если вы хотите использовать ресурс постов, вам нужно сделать ресурсы постов и внутри CategoryResource

'posts'=>PostResource::collection($this->posts)
0 голосов
/ 16 января 2020

не может использовать Ресурс в Коллекции. Используйте это

public function index()
{
    $categories = Category::all();

    return (new CategoryCollection($categories));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...