Пагинация красноречивая

Я хочу разбить порядок страниц по ссылкеscount em ASC …

Таблицы страниц:

----------------------
id | name
----------------------
1  | Globo
----------------------
2 | Google
----------------------
3 | MC Donalds
----------------------
4 | Habibs

Запрос к РЕЗУЛЬТАТАМ ПЕРВОЙ СТРАНИЦЫ (заказ / запрос в порядке):

            $pages = Mypages::where('pages.author_id', auth()->user()->id)
->orderBy('linkscount', 'desc')
->leftJoin('links', 'links.page_id', '=', 'pages.id')
->selectRaw('pages.*, count(links.id) as linkscount')
->groupBy('pages.id')
->take(2)
->get();

Запрос TO PAGINATE (заказ / запрос не в порядке):

                $pages = Mypages::where('pages.author_id', auth()->user()->id)
->orderBy('linkscount', 'asc')
->leftJoin('links', 'links.page_id', '=', 'pages.id')
->selectRaw('pages.*, count(links.id) as linkscount')
->groupBy('pages.id')
->where('pages.id', '>', $id)
->take(2)
->get();

Этот запрос ничего не возвращал, это было возвращение «MC Donalds» …

$ id = LAST ID отображается

1

Решение

Как сказал в комментарии Джейкоб Х., это не настоящий SQL, потому что для группирования по функциям нужно иметь все столбцы запроса, которые есть у вас в select, кроме таких функций, как count, sum и т. Д.

Для этого примера вам нужно поместить pages.name и pages.id в группу

$pages = Mypages::where('pages.author_id', auth()->user()->id)
->orderBy('linkscount', 'asc')
->leftJoin('links', 'links.page_id', '=', 'pages.id')
->selectRaw('pages.id, pages.name, count(links.id) as linkscount')
->groupBy('pages.id', 'pages.name')
->where('pages.id', '>', $id)
->take(2)
->get();

И если вы отправляете правильный $idвсе вроде нормально.

0

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

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

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