Laravel의 N+1 문제
Laravel : 5.6.26
예로서 ER과 Laravel 코드
UserController.php public function index() { $users = User::limit(5)->get(); return view('user.index')->with('users', $users); } index.blade.php @foreach ($users as $user) <p>{{$user->name}}</p> <ul> @foreach ($user->posts as $post) <li>{{$post->title}}</li> <li>댓글 수:{{ count($post->comments) }}</li> @endforeach </ul> @endforeach 그 결과 다음과 같은 select 문이 발행됩니다. select * from users limit 5 select * from posts where posts.user_id = 1 select * from comments where comments.post_id = 10 select * from posts where posts.user_id = 2 select * from comments where comments.post_id = 20 select * from posts where posts.user_id = 3 select * from comments where comments.post_id = 30 select * from posts where posts.user_id = 4 select * from comments where comments.post_id = 40 select * from posts where posts.user_id = 5 select * from comments where comments.post_id = 50 N+1 문제를 피하기 위해 with 사용 UserController.php public function index() { $users = User::with('posts')->limit(5)->get(); return view('user.index')->with('users', $users); } select * from users limit 5 select * from posts where posts.user_id in (1, 2, 3, 4, 5) select * from comments where comments.post_id = 10 select * from comments where comments.post_id = 20 select * from comments where comments.post_id = 30 select * from comments where comments.post_id = 40 select * from comments where comments.post_id = 50 posts는 피했지만 comments는 여전히 with로 점 지정 UserController.php public function index() { $users = User::with('posts.comments')->limit(5)->get(); return view('user.index')->with('users', $users); } select * from users limit 5 select * from posts where posts.user_id in (1, 2, 3, 4, 5) select * from comments where comments.post_id in (10, 20, 30, 40, 50) 중첩된 관계 대상의 comments까지 대응할 수 있다 Rails의 bullet 같은 녀석이 Laravel에 있으면 좋지만 없는 것 같다. ※제품의 코드로 시험했기 때문에 상기 코드는 기사 작성시에 손으로 일으키고 있습니다. 복사해도 움직이지 않을 수도 있습니다. 추가 N+1이 발생했는지, 발견할 수 있는 Laravel N+1 Query Detector라는 라이브러리가 있었던 것 같습니다 Laravel에서 N+1 감지
Reference
이 문제에 관하여(Laravel의 N+1 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tmf16/items/b9dd262c7738472c86d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)