具有 Relation 和 Eloquent 的 Laravel Api 资源

Posted

技术标签:

【中文标题】具有 Relation 和 Eloquent 的 Laravel Api 资源【英文标题】:Laravel Api Resource with Relation and Elequent 【发布时间】:2020-04-22 18:43:52 【问题描述】:

我们有一个模型“帖子”,每个帖子类型都是艺术家歌曲专辑 艺术家与歌曲和专辑有多对多的关系 每篇文章的标题都来自 eloquent with meta Model

我们需要返回每个帖子(例如歌曲)以及艺术家关系及其标题(歌曲标题和艺术家标题) 而这需要一个回帖(歌曲)和一个收藏帖(歌曲)

在 PostController 中:

public function index()
    
        return PostResource::collection(Post::with('artists')->with('title')->paginate(25));
    

在 PostResource 中:

public function toArray($request)
    
        return [
            'id' => $this->id,
            'slug' => $this->slug,
            'title' => $this->title,
            'artists' => $this->artists->title,
        ];
    

主要问题是歌曲的艺术家,当使用 'title' => $this->title 时它适用于歌曲(帖子类型歌曲)但当使用 'artists' => $this->artists->title 时它不起作用

谢谢

【问题讨论】:

很明显'artists' => $this->artists->title 不起作用,因为$this->artists 返回一个集合而不是一条记录。 【参考方案1】:

您可以使用pluck 方法从艺术家集合中获取标题集合:

'artists' => $this->artists->pluck('title')->all(),

【讨论】:

它不起作用,标题来自与艺术家(帖子)相关的元模型

以上是关于具有 Relation 和 Eloquent 的 Laravel Api 资源的主要内容,如果未能解决你的问题,请参考以下文章

从 table1 中检索数据,但在 table2 中进行比较 - Laravel eloquent

如何使用 Eloquent 在 Laravel 中开始查询?

Laravel / Eloquent 模型关系查看器

whereHasIn方法

Eloquent 只获取一列作为数组

通过 eloquent 具有子项和权限的 Laravel 菜单