Задать вопрос
@nightsamurai

Почему пагинация в doctrine при orderBy c limit/offset/joins выдаёт неправильное количество результатов при DESC?

Здравствуйте.
У меня следующая проблема:
Есть класс для работы с запросами, в нем создаются запросы на выборку с limit и offset, всё работает нормально, но если выполнить запрос на выборку указав в orderBy = DESC
количество результатов не совпадает с ожидаемым, например указав limit=20 и orderBy('column',DESC) вернётся примерно 7-8 результатов

Метод - который собирает запрос:

код
private function getQuery(string $entityStr): Query
    {
        $entity = $this->getEntity();

        /**
         * @var $manager EntityManager
         */
        $manager = $this->entityManager;

        $query = $manager
            ->createQueryBuilder()
            ->select('e')
            ->from($entityStr, 'e')
        ;

        $this->joinTables($query);

        $this->getWhereBy($query, $entity);

        $this->filterQuery($query, $entity);

        if ($entity->getGetLimit()) {
            $query->setMaxResults($entity->getGetLimit());
        }

        if ($entity->getGetOffset()) {
            $query->setFirstResult($entity->getGetOffset());
        }

        if ($sort = $entity->getGetSort()) {

            $order = $entity->getGetDesc() ? 'DESC' : 'ASC';

            $query->orderBy($this->getSortBy($entity), $order);
        }

        return $query->getQuery();
    }


Метод который выполняет запрос:

код
public function findAllBy(string $entityStr): array
    {
        $query = $this->getQuery($entityStr);

        $paginator = new Paginator($query, true);
        $count = $paginator->count();

        $result = $paginator->getQuery()->getResult();

        return [
            'collection' => $result,
            'has_more'   => \count($result) + $paginator->getQuery()->getFirstResult() < $count,
        ];
    }

P.S. Локально ( Windows 7, php 7.1.6, doctrine/orm v2.5.12 ) всё работает как надо, на сервере нет ( NGINX, php 7.1.12, doctrine/orm v2.5.12 )

composer
"require": {
        "php": ">=7.1.4",
        "curl/curl": "^1.8",
        "sl4mmer/phpcent":"dev-master",
        "symfony/symfony": "3.3.*",
        "doctrine/orm": "^2.5",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/doctrine-cache-bundle": "^1.2",
        "symfony/swiftmailer-bundle": "^2.3",
        "symfony/monolog-bundle": "^3.0.2",
        "symfony/polyfill-apcu": "^1.0",
        "sensio/distribution-bundle": "^5.0",
        "sensio/framework-extra-bundle": "^3.0.2",
        "incenteev/composer-parameter-handler": "^2.0",
        "twig/twig": "^1.0||^2.0",
        "friendsofsymfony/rest-bundle": "^2.1",
        "phpunit/phpunit": "*",
        "friendsofsymfony/oauth-server-bundle": "^1.5",
        "doctrine/doctrine-fixtures-bundle": "^2.3",
        "doctrine/doctrine-migrations-bundle": "^1.0",
        "javiereguiluz/easyadmin-bundle": "^1.16",
        "lexik/jwt-authentication-bundle": "^2.4"
    },
    "require-dev": {
        "sensio/generator-bundle": "^3.0"
    },



Любая помощь приветствуется :)
  • Вопрос задан
  • 769 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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