Intereting Posts
Как получить изображения с помощью API Instagram PHP: Получить код ошибки ответа fopen () HTTP Сервер Xampp PHP GET работает Fine POST не работает Отправлять почту с вложением с использованием нового API Gmail, но он не отображается для входящих сообщений получателя значение поиска многомерного массива и вернуть его ключ php Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать? Удалить строку из файла CSV Отфильтровать раскрывающееся меню на основе другого выбора Многострочная диаграмма линейки Google, используя данные mySQL db Laravel 5.3 хранить и читать каталоги файлов Как связать элемент XML с префиксом пространства имен с помощью оператора объекта? Строка анализа, содержащая диапазон значений до минимальных и максимальных переменных Поиск PHP ключа в многомерном массиве Fullcalendar. привязка к базе данных Как прочитать список файлов из папки с помощью PHP?

distinct () с pagination () в laravel 5.2 не работает

Я пытаюсь использовать clear pagination() с pagination pagination() в laravel 5.2 с беглостью, и это дает результат правильно, но разбиение на страницы остается таким же (как без применения отдельных).

Я уже рассмотрел и протестировал ниже ответы с моим кодом
– laravel 5 – paginate total () запроса с четкими
– Paginate & Distinct
– Недопустимое число счетчиков меток запроса Query Builder при использовании отдельных

Мой код выглядит примерно так:

 DB::table('myTable1 AS T1') ->select('T1.*') ->join('myTable2 AS T2','T2.T1_id','=','T1.id') ->distinct() ->paginate(5); 

ПРИМЕР
– У меня есть результат с тремя записями (т.е. POST1, POST2, POST3 и POST1 ), поэтому я применяю clear distinct() .
– Теперь мои результаты – POST1, POST2 и POST3, но разбиение на страницы по-прежнему отображается как 4 записи (как результат перед применением distinct() ).

Любое предложение будет оценено!

Кажется, что некоторые проблемы с Laravel существуют и используются с разбивкой по страницам.

В этом случае, когда разбиение на страницы определяет общее количество записей, оно игнорирует поля, указанные вами в предложении select() . Поскольку он игнорирует ваши столбцы, отдельные функции также игнорируются. Таким образом, запрос count становится select count(*) as aggregate from ...

Чтобы решить эту проблему, вам нужно сообщить функции paginate о ваших столбцах. Передайте свой массив столбцов, чтобы выбрать в качестве второго параметра, и он будет учитывать их для общего количества. Итак, если вы это сделаете:

 /*DB::stuff*/->paginate(5, ['T1.*']); 

Это запустит запрос count:

 select count(distinct T1.*) as aggregate from 

Итак, ваш запрос должен выглядеть так:

 DB::table('myTable1 AS T1') ->select('T1.*') ->join('myTable2 AS T2','T2.T1_id','=','T1.id') ->distinct() ->paginate(5, ['T1.*']); 

Яркий работает … Когда вы делаете соединение, он проверяет отдельные записи во всех выбранных столбцах и здесь .. Имена столбцов, которые вы получаете после присоединения, также включаются в соединение …

Чтобы запустить это, добавьте select() в экземпляр вашего строителя, и он должен работать 🙂

 DB::table('myTable1 AS T1') ->join('myTable2 AS T2','T2.T1_id','=','T1.id') ->select('T1.*') ->distinct() ->paginate(5); 

Дайте мне знать, если это не сработает для вас 🙂

Я нашел проблему в своем коде, то есть мне нужно передать $column качестве второго параметра в paginate($perPage, $columns, $pageName, $page) . Я получил решение от laravel git .

Поэтому мой рабочий код:

 DB::table('myTable1 AS T1') ->select('T1.*') ->join('myTable2 AS T2','T2.T1_id','=','T1.id') ->distinct() ->paginate(5, ['T1.*']); 

Необходимое предложение
Что если, я взломаю код для Builder.php, чтобы обойти передачу второго параметра $column . Я имею в виду, что это хорошая вещь или любой вариант теста?

 /** * Paginate the given query into a simple paginator. * * @param int $perPage * @param array $columns * @param string $pageName * @param int|null $page * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator */ public function paginate($perPage = 15, $columns = null, $pageName = 'page', $page = null) { //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 = ['*']; } } $page = $page ?: Paginator::resolveCurrentPage($pageName); $total = $this->getCountForPagination($columns); $results = $total ? $this->forPage($page, $perPage)->get($columns) : []; return new LengthAwarePaginator($results, $total, $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName, ]); }