Исправление ошибки Not all identifier properties can be found in the ResultSetMapping

// Март 20th, 2012 // Doctrine 2

Сегодня пол дня потратил на исправлние ошибки, которая возникла после обновления Doctrine 2.1 -> 2.2. В принципе потом все разрешилось благополучно, но мозг как всегда поломать пришлось.

Проблема

Мне в почту свлился тикет с ошибкой вот такого содержания.

Not all identifier properties can be found in the ResultSetMapping

Файл: /home/www/site.ru/web/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php
Строка: 107

#0 /home/www/site.ru/web/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(38): Doctrine\ORM\Tools\Pagination\CountOutputWalker->walkSelectStatement(Object(Doctrine\ORM\Query\AST\SelectStatement))
#1 /home/www/site.ru/web/lib/Doctrine/ORM/Query/SqlWalker.php(192): Doctrine\ORM\Query\Exec\SingleSelectExecutor->__construct(Object(Doctrine\ORM\Query\AST\SelectStatement), Object(Doctrine\ORM\Tools\Pagination\CountOutputWalker))
#2 /home/www/site.ru/web/lib/Doctrine/ORM/Query/Parser.php(325): Doctrine\ORM\Query\SqlWalker->getExecutor(Object(Doctrine\ORM\Query\AST\SelectStatement))
#3 /home/www/site.ru/web/lib/Doctrine/ORM/Query.php(211): Doctrine\ORM\Query\Parser->parse()
#4 /home/www/site.ru/web/lib/Doctrine/ORM/Query.php(241): Doctrine\ORM\Query->_parse()
#5 /home/www/site.ru/web/lib/Doctrine/ORM/AbstractQuery.php(647): Doctrine\ORM\Query->_doExecute()
#6 /home/www/site.ru/web/lib/Doctrine/ORM/AbstractQuery.php(496): Doctrine\ORM\AbstractQuery->execute(Array, 3)
#7 /home/www/site.ru/web/lib/Doctrine/ORM/Tools/Pagination/Paginator.php(148): Doctrine\ORM\AbstractQuery->getScalarResult()
#8 [internal function]: Doctrine\ORM\Tools\Pagination\Paginator->count()

Причем код спотыкался на простейшем запросе. Пару дней назад мы обновили Doctrine, а в её репозитарий прилетел вот такой замечательный pull-request. Разработчик решил переименовать SqlWalker в OutputWalker и сделать ещё ряд работ. ПОдробнее читайте в коммите. Так вот после этого коммита пагинатор работать перестаёт, и вываливается с этой ошибкой. Пришлось файл за файлом смотреть diff’ы и искать в чём может быть подвох.

Подвох обнаружился в том, что ранее строка в методе count() была такая:

$countQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));

Теперь же управление идёт по другой ветви в:

$countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');

Решение

Чтобы восстановить работу пагинатора достаточно изменить параметр (setUseOutputWalkers()), выбирающий ветку вот так:

$paginator = new Paginator($dql);
$paginator->setUseOutputWalkers(false);
$count = count($paginator);

После этого работа пагинатора была восстановлена.

 

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


2 Responses to “Исправление ошибки Not all identifier properties can be found in the ResultSetMapping”

  1. Andrew:

    Замечу, что если не использовать Doctrine, то и ошибки не было бы :)

Комментировать