从用户获取与模型的morphMany关系

时间:2018-05-30 08:21:29

标签: php laravel eloquent

假设我有以下内容;

用户模型;

class User extends Authenticatable 
{

  public function posts()
  {
    return $this->hasMany('App\Models\Socials\Post');
  }
}

发布模型;

class Post extends Model 
{

  public function comments()
  {
    return $this->morphMany('App\Models\Socials\Comment', 'commentable');
  }

评论模型;

class Comment extends Model
{
    public function commentable()
    {
     return $this->morphTo();
    }

当我使用$user = User::find($id);$user->posts()时,它会返回用户的所有帖子,但如果我使用此方法$user->posts()->comments()则会返回此消息Method Illuminate\Database\Query\Builder::comments does not exist

问题是如何在上述帖子中获得用户的所有评论?

1 个答案:

答案 0 :(得分:1)

变化:

$user->posts()->comments();

为:

$user->posts->pluck('comments')->collapse();

该方法本身返回一个Eloquent查询构建器的实例,允许您根据需要添加或编辑查询。但是,如果您不想编辑查询,则可以将属性作为属性访问,Laravel将处理查询的执行。

基本上,$user->posts实际上是在后台变成$user->posts()->get()

归功于@JonasStaudenmeir。