Laravel 5.2 — Неправильная общая нумерация страниц при использовании отдельного предложения

У меня есть следующий запрос, где я хочу выбрать отдельные строки. Однако запрос подсчета, сгенерированный paginator, кажется, не
добавить отдельное предложение, и поэтому я получаю неправильный итог?

DB::enableQueryLog();

$jobs =  Job::join('locations', 'locations.id', '=', 'jobs.location_id')
->join('job_industry', 'job_industry.job_id', '=', 'jobs.id')
->select('jobs.*', 'locations.name')
->distinct()
->paginate(5, 'jobs.id');

dd(DB::getQueryLog());

Это журнал запросов:

"query" => """select count(*) as aggregate from `jobs`
inner join `locations` on `locations`.`id` = `jobs`.`location_id`
inner join `job_industry` on `job_industry`.`job_id` = `jobs`.`id`

"""

"query" => """select distinct `jobs`.*, `locations`.`name` from `jobs`
inner join `locations` on `locations`.`id` = `jobs`.`location_id`
inner join `job_industry` on `job_industry`.`job_id` = `jobs`.`id`
limit 5 offset 0
"""

Как вы можете видеть, запрос количества, сгенерированный методом paginator, неверен — он должен быть COUNT(DISTINCT jobs.id) as aggregate...

Я следовал инструкции из следующего поста (Different () с нумерацией страниц () в Laravel 5.2 не работает) но я не могу найти следующий код, указанный в посте выше, внутри моей копии builder.php — это можно проверить, проверив мастер репо:
https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Builder.php#L484

 //To solved paginator issue with distinct...
if(is_null($columns) && strpos($this->toSql(), 'distinct') !== FALSE){
$columns = $this->columns;
$columns = array_filter($columns, function($value) {
return (is_string($value) && !empty($value));
});
}
else {
//If null $column, set with default one
if(is_null($columns)){
$columns = ['*'];
}
}

Я пытался добавить приведенный выше код в свой собственный метод paginate внутри файла builder.php, но это не имеет значения — у меня все еще такое же поведение?

Как это исправить. Единственный способ, которым я могу преодолеть это, — это использовать группу по выражению, но тогда это имеет свои проблемы с производительностью.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector