Laravel 페이지 매김은 그룹 단락과 올바르게 작동하지 않는 것 같습니다. 예를 들어 :Laravel 페이지 매김이 그룹 단락과 작동하지 않음
$users = Subject::select(DB::raw('subjects.*, count(user_subjects.id) as total_users')) ->join('user_subjects', 'user_subjects.subject_id', '=', 'subjects.id') ->whereNull('user_subjects.deleted_at') ->groupBy('subjects.id') ->orderBy('subjects.updated_at', 'desc') ->paginate(25);
는 쿼리에 더 limit
조항이 없다는 것을
select subjects.*, count(user_subjects.id) as total_users from `subjects` inner join `user_subjects` on `user_subjects`.`subject_id` = `subjects`.`id` where `subjects`.`deleted_at` is null and `user_subjects`.`deleted_at` is null group by `subjects`.`id` order by `subjects`.`updated_at` desc
노트 제작.
작업을 잘 경우 쿼리의 조항에 의해 어떤 그룹 :
$users = Subject::select(DB::raw('subjects.*, count(user_subjects.id) as total_users')) ->join('user_subjects', 'user_subjects.subject_id', '=', 'subjects.id') ->whereNull('user_subjects.deleted_at') ->orderBy('subjects.updated_at', 'desc') ->paginate(25);
다음 쿼리를 생산 :
select subjects.*, count(user_subjects.id) as total_users from `subjects` inner join `user_subjects` on `user_subjects`.`subject_id` = `subjects`.`id` where `subjects`.`deleted_at` is null and `user_subjects`.`deleted_at` is null order by `subjects`.`updated_at` desc limit 25 offset 0
사람이 내가이 문제를 해결할 수있는 방법 어떤 생각을 가지고 있습니까?
왜 그런지는 모르겠지만 그룹 단속기가 Laravel에서 이것을 처리 할 수없는 이유는 확실하지 않습니다. 그것은 기본적으로 전체 집합을 검색하고 PHP 쪽에서 결과를 분할합니다. 이 경우 수동으로 수행하거나 필요한 카운트를 얻는 것이 좋습니다. –
위의 내용은 사실입니다. 코드를 살펴보면 페이징 담당자가 가능한 한 'LIMIT'을 추가하려고 시도하지만 쿼리에 'GROUP BY'가 있으면 바로 모드로 전환됩니다. 모든 결과를 얻고 PHP에서'array_slice'를 사용하여 수동으로 페이지 매김을해야합니다. 나는 페이징 기 클래스를 한 번 둘러보고 실제로 페이징 기가 'LIMIT'을 사용하지 않았지만 그것이 GROUP BY 문일 때만 깨달은 버그라고 생각했습니다. 그래서 예 - 페이징 담당자가 제대로 작동하지 않아야한다는 것을 알게 될 것입니다. 나는 당신이 거대한 결과 세트를 가지지 않기를 바랄뿐입니다! – alexrussell
@alexrussell 감사합니다. 문제는 대용량 데이터 세트를 가지고 있다는 것입니다. (. – Anam