Laravel资源-从关系中获取数据

时间:2020-01-16 10:23:43

标签: php laravel

我正在尝试使用Laravel的资源和Collection构建一个小的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
    ];
}

我的CategoryCollection

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

我尝试首先恢复某个类别的帖子。当我执行以下命令时,出现错误:方法... lationLoaded不存在

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

我不明白什么?

我还创建了两个PostCollection和PostResource文件(基本,我没有修改它们)

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

2 个答案:

答案 0 :(得分:1)

public function index()

{
    $categories = Category::all();

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

这可能会有所帮助,请尝试

,如果要使用帖子资源 您需要制作帖子资源 并在CategoryResource内

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

答案 1 :(得分:0)

无法使用集合中的资源。 使用这个

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

    return (new CategoryCollection($categories));
}