N + 1时试图加载超过1个深度的关系。 Laravel

时间:2015-03-29 23:51:09

标签: laravel laravel-4 eloquent

不确定我的标题是否适合我的情况但是......

在我的Laravel项目中,我尝试使用属于该图像的所有注释显示图像。每个评论都喜欢。当我试图加载这个时,我仍然会收到每个评论的查询,以获取该评论的喜欢。有没有办法我可以急切地为每个正在加载的评论加载喜欢的内容?

以下是我的模特

媒体模型

class Media extends Eloquent {
    public function comments()
    {
        return $this->hasMany('Comment');
    }
}

评论模型

class Comment extends Eloquent {
    public function media()
    {
        return $this->belongsTo('Media');
    }

    public function likes()
    {
        return $this->hasMany('Like');
    }
}

喜欢模特

class Like extends Eloquent {
    public function comment()
    {
        return $this->belongsTo('Comment');
    }
}

我的控制器

public function imageViewer($id)
{
    $images = Media::with(['comments', 'comments.likes'])->where('resource_id', $id)->simplePaginate(1);
    return View::make('image-viewer', compact('images'));
}

我知道如果我想急切加载图片的评论,我可以做这样的事情 Media::with('comments')->get();

但是我不确定如何能够加载那些属于那些我渴望加载的媒体评论的喜欢?

1 个答案:

答案 0 :(得分:1)

你可以这样做。

$medias = Media::with(['comments' => function($query) {
    $query->with('likes');
}])->where('resource_id', $id)->simplePaginate(1);

您可以为每条评论检索相似内容。

foreach($medias as $media)
{
    echo $media->name; // column
    foreach($media->comments as $comment)
    {
        echo $comment->likes()->count();
    }
}