首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当尝试急切加载多个关系深度时使用N+1。拉威尔

当尝试急切加载多个关系深度时使用N+1。拉威尔
EN

Stack Overflow用户
提问于 2015-03-30 07:51:09
回答 1查看 111关注 0票数 1

不知道我的头衔是否适合我的情况,但是...

在我的Laravel项目中,我试图显示一个包含属于该图像的所有评论的图像。每条评论都有赞。当我尝试快速加载它时,我仍然会得到一个针对每个评论的查询,为该评论获取点赞。有没有一种方法可以让我为每个正在被热切加载的评论加载点赞?

这是我的模型

媒体模型

代码语言:javascript
复制
class Media extends Eloquent {
    public function comments()
    {
        return $this->hasMany('Comment');
    }
}

评论模型

代码语言:javascript
复制
class Comment extends Eloquent {
    public function media()
    {
        return $this->belongsTo('Media');
    }

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

Like模型

代码语言:javascript
复制
class Like extends Eloquent {
    public function comment()
    {
        return $this->belongsTo('Comment');
    }
}

我的控制器

代码语言:javascript
复制
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();

但我不确定我如何才能热切加载那些属于我刚刚热切加载的媒体评论的点赞?

EN

回答 1

Stack Overflow用户

发布于 2015-03-30 17:36:31

你可以简单地做到这一点。

代码语言:javascript
复制
$medias = Media::with(['comments' => function($query) {
    $query->with('likes');
}])->where('resource_id', $id)->simplePaginate(1);

你还可以检索每条评论的点赞。

代码语言:javascript
复制
foreach($medias as $media)
{
    echo $media->name; // column
    foreach($media->comments as $comment)
    {
        echo $comment->likes()->count();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29336377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档