解决 N+1 问题:Eloquent ORM 性能优化的必修课
假设你有两个模型:Post (文章) 和 Comment (评论)。一篇文章有多条评论。
当你获取所有文章并遍历输出评论作者时:
$posts = Post::all(); // 1次查询
foreach ($posts as $post) {
echo $post->comments->user->name; // 每一轮循环都会触发一次新的SQL查询!
}
如果你有100篇文章,这里就会执行 1 + 100 = 101 次数据库查询。这就是著名的 N+1 问题。
解决方案非常简单: eager loading (预加载)。
$posts = Post::with('comments.user')->get();
这样,Laravel只会执行2次查询:一次查文章,一次查所有相关的评论和用户。性能提升立竿见影。