Php Laravel延迟负载优化

Php Laravel延迟负载优化,php,laravel,orm,query-optimization,eloquent,Php,Laravel,Orm,Query Optimization,Eloquent,我想用一个查询加载我所有的评论,因为现在我有论坛线程和回复以及评论,所以我渴望分别加载评论 $threads = Thread::with('comments'); $replies = Reply::with('comments'); 可能是这样的: Comment::loadFor([$threads, $replies]); 如果在注释模型中声明了两者的关系,则可以尝试以下方法: $comments = Comment::with('threads', 'replies')->g

我想用一个查询加载我所有的评论,因为现在我有论坛线程和回复以及评论,所以我渴望分别加载评论

$threads = Thread::with('comments');
$replies = Reply::with('comments');
可能是这样的:

Comment::loadFor([$threads, $replies]);

如果在注释模型中声明了两者的关系,则可以尝试以下方法:

$comments = Comment::with('threads', 'replies')->get();
在这种情况下,您需要创建关系方法,即评论模型中的线程和回复,例如:

public function replies()
{
    return $this->hasMany('Reply', 'comment_id', 'id'); // Could be different
}

public function threads()
{
    return $this->hasMany('Thread', 'comment_id', 'id'); // Could be different
}

$comments=Comment::with['forum','reply']->get;按照下面的@werewolf的例子来建立关系。还要确保阅读关于关系的文档,因为它们都在那里。使用雄辩的方法进行单个查询无法做到这一点,因为它会对每个关系执行单独的查询。对你来说,优化就是缓存。我明白了,从后面开始。不行,我要先找到线!我需要先找到线程,然后得到它的关系。问题是comments表查询了两次,正如我所看到的,它已经足够好了。如果有一个方法能够允许更少的查询,那就太好了。你能提供你的关系方法吗,它们是如何相互关联的。