Laravel 4 - разбивка на страницы игнорирует отдельные в Fluent

Я делаю беглый запрос с разбивкой и разбивкой на страницы. Моя проблема в том, что запрос на разбивку на страницы выполняется до запроса на удаление

Мой свободный запрос:

$candidates = DB::table('candidates')
            ->select('candidates.*')
            ->distinct()
            ->join('candidate_region', 'candidates.id', '=', 'candidate_region.candidate_id')
            ->join('candidate_job', 'candidates.id', '=', 'candidate_job.candidate_id')
            ->whereIn('candidate_region.region_id', $inputs['region'])
            ->whereIn('candidate_job.job_id', $inputs['job'])
            ->where('imavailable', '1')
            ->where('dateDisponible', '<=', $inputs['availableDate'])
            ->paginate(15);

Я тестирую свой запрос с помощью DB::getQueryLog()

$query = DB::getQueryLog($candidates);

$query показывает, что запрос на разбиение на страницы (с подсчетом) для создания номера страницы:

5 => 
array (size=3)
     'query' => string 'select count(*) as aggregate from `candidates` inner join `candidate_region` on `candidates`.`id` = `candidate_region`.`candidate_id` inner join `candidate_job` on `candidates`.`id` = `candidate_job`.`candidate_id` where `candidate_region`.`region_id` in (?, ?, ?, ?, ?) and `candidate_job`.`job_id` in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) and `imavailable` = ? and `dateDisponible` <= ?' (length=396)

И мой запрос с отличным выполняется после разбиения на страницы:

6 => 
array (size=3)
  'query' => string 'select distinct `candidates`.* from `candidates` inner join `candidate_region` on `candidates`.`id` = `candidate_region`.`candidate_id` inner join `candidate_job` on `candidates`.`id` = `candidate_job`.`candidate_id` where `candidate_region`.`region_id` in (?, ?, ?, ?, ?) and `candidate_job`.`job_id` in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) and `imavailable` = ? and `dateDisponible` <= ? limit 15 offset 15' (length=417)

Как сделать, чтобы запрос на выполнение отличался от разбиения на страницы?

Спасибо


person timothylhuillier    schedule 12.06.2013    source источник


Ответы (1)


Слепое предположение: попробуйте

DB::table('candidates')->...stuff...->get()->paginate(15)

Реальный ответ: создайте свой пагинатор вручную:

$candidates = DB::table('candidates')->...stuff...->get();

$paginator = Paginator::make($candidates, count($candidates), 15);
person Alexandre Danault    schedule 13.06.2013
comment
->get->paginate это невозможно. Paginator не принимает объект и не возвращает объект - person timothylhuillier; 13.06.2013
comment
$paginator = Paginator::make($candidates, count($candidates), 15); все в порядке, он возвращает хорошее числовое представление. Но все кандидаты показаны на странице - person timothylhuillier; 13.06.2013
comment
Конечно, поскольку ручной пагинатор генерирует только номера страниц, вам придется фильтровать свой массив самостоятельно (легко) - person Alexandre Danault; 13.06.2013
comment
включить фильтр с помощью beforeFilter ? - person timothylhuillier; 14.06.2013
comment
еще проще: $candidates = array_slice($candidates, $start, $count); php.net/manual/fr/function.array-slice. php - person Alexandre Danault; 14.06.2013
comment
Спасибо, да: paste.laravel.com/wBc, но теперь разбиение на страницы в представлении не является обязательным, почему? Но если я изменю номер в get, он работает - person timothylhuillier; 14.06.2013
comment
Отправьте $paginator в представление и используйте его для создания ссылок. - person Alexandre Danault; 14.06.2013
comment
Спасибо, приятно :) Но я не понимаю, почему, у меня есть одна лишняя страница. - person timothylhuillier; 14.06.2013
comment
Сколько записей у вас есть, сколько вы показываете на странице и сколько страниц она вам дает? Кроме того, может быть, вы неправильно нарезаете? - person Alexandre Danault; 14.06.2013
comment
Я понимаю, почему у меня есть одна дополнительная страница: потому что laravel.com/ api/: используется ceil() - person timothylhuillier; 14.06.2013
comment
Мне это не кажется неправильным. 65 записей по 15 на страницу = 65/15 = 4,333.. итак 5 страниц. ceil() меня устраивает. Какие ВАШИ номера? - person Alexandre Danault; 14.06.2013
comment
221/15 = 14,73, значит, у меня 15 страниц, но последние страницы пусты. потому что на странице № 14 всего 13 кандидатов (а не 15) - person timothylhuillier; 14.06.2013
comment
Ваши цифры неверны: paste.laravel.com/wJP Каков ваш алгоритм среза? - person Alexandre Danault; 14.06.2013
comment
Это решение работает, но это все еще проблема, которую команда Laravel должна исправить... что делать при выполнении запроса из 100 000+ записей? разбиение на страницы на уровне запроса является ключевым... - person Jubair; 08.08.2014