如何使用Eloquent ORM获取喜欢帖子的用户列表?

时间:2017-10-15 06:49:23

标签: php laravel laravel-5 eloquent

我有一个Post模型,它通过此函数与Likes模型具有多态关系:

public function likes() {
  return $this->morphMany('App\Models\Like', 'likeable');
}

返回我的Likes模型:

public function likeable() {
  return $this->morphTo();
}

更新

likes()方法返回如下集合:

  [  
   {  
      "id":125,
      "user_id":30,
      "likeable_id":1,
      "likeable_type":"App\Models\Post",
      "created_at":"2017-10-13 22:06:13",
      "updated_at":"2017-10-13 22:06:13"
   },
   {  
      "id":126,
      "user_id":17,
      "likeable_id":1,
      "likeable_type":"App\Models\Post",
      "created_at":"2017-10-13 22:06:13",
      "updated_at":"2017-10-13 22:06:13"
   }
  ]

现在我想在我的Post模型中创建另一个函数,让每个User与返回集合中每个user_id对象的like相关联,我是到目前为止写了这个:

public function likeUsers($post) {
  $likes = $post->Likes();
  foreach ($likes as $like) {
    $user = User::find($like->user_id);
    $name = $user->first_name;
    // Here is where i want to push the $name var into a new collection  

  }
   //return new Collection;
}

如何将$name中的每个foreach var推送到新的Eloquent集合中并返回?

1 个答案:

答案 0 :(得分:0)

您不应直接在模型上调用 getLikes()。相反,您应该访问 getLikes 属性:

{{1}}

我还建议您将方法名称从 getLikes()更改为 likes()。它不是一个吸气剂,而是一个关系定义,而惯例就是用你命名关系的方式来命名这种方法。然后,您应该可以使用 $ post->赞来访问喜欢帖子的模型。

顺便说一下,除了用户之外,你还有其他任何模特吗?如果没有,你不需要多态关系, belongsToMany 就足够了。