Laravel 5 - 具有嵌套关系的API资源

时间:2018-06-07 19:40:47

标签: php laravel-5 eloquent

首先,几周前我开始学习Laravel,如果我在解释问题的时候没有使用正确的单词,那就很抱歉。

我正在尝试编写一些API来检索我的数据库中的所有帖子以及帖子的内容信息我想检索与每个帖子相关的用户信息(如用户名,ID等)。

用户模型:

public function post()
    { return $this->hasMany(Post::class); }

发布模型:

public function user()
    { return $this->belongsTo(User::class); }

然后在我的PostResource中我尝试从DB

返回帖子的数据

发布资源:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'user_id' => $this->user_id,
        'user_info' => HERE_I_WANT_USER[USERNAME,ID ETC.]
        'body' => $this->name
    ];
}

在我的PostController中我有这个函数返回我的集合:

 public function show() { 
      return PostResource::collection ( Post::get() );
 }

因此,每个帖子都链接到每个作者,这要归功于“user_id”值。

这是我的问题:实现这一目标的步骤是什么?

我已经红色Laravel Doc“https://laravel.com/docs/5.5/eloquent-resources#conditional-relationships”制作和UserResource,并执行与之前相同的步骤,但我无法检索任何数据,因为我的用户信息返回为空。

我想更好地了解步骤是什么。

1 个答案:

答案 0 :(得分:2)

你只需称它为Post模型的一部分。类似的东西:

return [
        'id' => $this->id,
        'user_id' => $this->user_id,
        'user_info' => $this->user
        'body' => $this->name
    ];

我假设$this是帖子模型。如果不是,那么您会想要找到它,而不是像$post->user那样使用它。另外,方法的名称将是你的关系函数被调用的任何东西(没有括号),所以如果它发生了变化,你将不得不更新它。最后,这将返回一个用户模型,因此您可以像普通模型($post->user->username或其他)一样与它进行交互。

Here is the Laravel Relationship documentaion以供进一步参考。