簡體   English   中英

如何使用Eloquent ORM獲得喜歡發貼的用戶列表?

[英]How to get a list of users who liked post using Eloquent ORM?

我有一個通過以下功能與Likes模型具有多態關系的Post模型:

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

回到我的Likes模型:

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

UPDATE

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模型中創建另一個函數,該函數獲取與返回的集合中每個like對象的user_id關聯的每個User ,到目前為止,我已經編寫了此函數:

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;
}

如何將我的foreach的每個$name var推送到新的Eloquent集合中並返回?

您不應該在模型上直接調用getLikes() 相反,您應該訪問getLikes屬性:

foreach ($post->getLikes as $like) {
  //$like will contain a model that likes the post
}

我還建議您將方法名稱從getLikes()更改為likes() 它不是一個獲取器,而是一個關系定義,約定是按照命名關系的方式來命名這種方法。 然后,您應該能夠使用$ post-> likes訪問喜歡您的帖子的模型。

順便說一句,除了用戶,您還會有其他模型嗎? 如果不是這樣,則您不需要多態關系, belongsToMany就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM