2017-10-15 24 views
2

我有了在此函數的方式多形態關係到Likes模型Post型號:如何使用Eloquent ORM獲取喜歡發貼的用戶列表?

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

回到我Likes模型:

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

UPDATE

的方法返回如下集合:

[ 
    { 
     "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集合並返回它?

回答

0

您不應該直接致電getLikes()直接在您的模型上。相反,你應該訪問getLikes屬性:

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

我也建議你從getLikes(改變方法名)喜歡()。它不是一個getter,而是一個關係定義,慣例是按照您命名關係的方式來命名這種方法。那麼你應該可以訪問模型,喜歡你的帖子$ post-> likes

順便說一句,你會有任何其他模型像你的職位,除了用戶?如果沒有,你不需要多態關係,belongsToMany應該是足夠的。

+0

正如我所說的,你不應該直接調用likes()方法。相反,你應該閱讀'likes'屬性,例如$ likes = $ post-> likes ;.嘗試一下,讓我知道你得到了什麼。 –

+0

確定,這給了我與直接調用方法相同的集合...如何幫助我找到解決我更新的問題? –

+0

只有用戶喜歡你的帖子嗎?或者你有其他可以喜歡帖子的模特嗎? –

相關問題