@djay

Баг в Yii2 — пагинация не работает с orderBy()?

В документации приведен очень хороший пример как работать с пагинацией

Однако, стоить лишь задать orderBy('id DESC') как подсчет начинает глючить. А глючит именно так - на какой-то странице выведет 15, на какой-то 14. При это параметер pageSize задан в 15. Но если убрать orderBy() - то все идеально работает.

Вроде я не первый, кто столкнулся с этим но адекватного решения не смог найти нигде до сих пор.

$query = Article::find()->where(['status' => 1])
                                   ->orderBy('id DESC');


У кого-нибудь есть решение, быть может?
  • Вопрос задан
  • 827 просмотров
Решения вопроса 1
@djay Автор вопроса
Решение оказалось довольно тривиальным, нужно перед orderBy() поставить groupBy() по тому же столбцу.

$query->groupBy('items.id')
           ->orderBy('items.id DESC');


Странно что разработчики не упомянули это в документации.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
orlov0562
@orlov0562
I'm cool!
попробуй orderBy добавлять после формирования пагинации, типа того:
use yii\data\Pagination;

$query = Article::find()->where(['status' => 1]);
$count = $query->count();
$pagination = new Pagination(['totalCount' => $count]);

$articles = $query->orderBy('id DESC')->offset($pagination->offset)
    ->limit($pagination->limit)
    ->all();
Ответ написан
@karminski
Senior React.JS Developer
Попробуйте так
orderBy(['id' => SORT_DESC]);
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если используете ActiveDataProvider то сортировку надо задавать в нем, а не в query
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы