2017-10-15 96 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

只有用户喜欢你的帖子吗?或者你有其他可以喜欢帖子的模特吗? –

相关问题