Symfony2 Doctrine throw NonUniqueResultException
У меня проблема с вызовом NonUniqueResultException в моем запросе
public function getLastViewUpdate($view)
{
$qb = $this->getEntityManager()->createQueryBuilder();
$result = $qb->select('vu')
->from('EasyApp\ApplicationBundle\Entity\ViewUpdate', 'vu')
->where('vu.view = :view')
->orderBy('vu.date','DESC')
->setParameter('view', $view)
->getQuery()
->getSingleResult();
return $result;
}
Но я не знаю, почему, я могу что-то импортировать, но я не могу найти
CRITICAL - Uncaught PHP Exception Doctrine\ORM\NonUniqueResultException: "" at /Users/antoine/Documents/projects/easyApp/application/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php line 621
Спасибо за помощь
Ответы
Ответ 1
Вы можете проверить декларацию функции getSingleResult
/**
* Gets the single result of the query.
*
* Enforces the presence as well as the uniqueness of the result.
*
* If the result is not unique, a NonUniqueResultException is thrown.
* If there is no result, a NoResultException is thrown.
*
* @param integer $hydrationMode
* @return mixed
* @throws NonUniqueResultException If the query result is not unique.
* @throws NoResultException If the query returned no result.
*/
public function getSingleResult($hydrationMode = null)
{
...
if (count($result) > 1) {
throw new NonUniqueResultException;
}
...
}
Чтобы решить проблему, вы можете установить LIMIT
запрос и получить только один результат с помощью ->setMaxResults(1)
.
Ответ 2
Не используйте getSingleResult
, если вы ожидаете более одного результата... Используя эту функцию, вы выполняете однозначную проверку своего результата, это намерение этой функции.
Множество вариантов:
- Используйте
getSingleResult
и обработайте исключение (например, try {...} catch (NonUniuqueResultException $e) {...}
) или настройте структуру базы данных, чтобы избежать дублирования,
- Используйте
getSingleResult
и добавьте setMaxResults(1)
, но это действительно странный способ доверять вашей модели БД,
- Используйте
getResult
и сделайте что-нибудь с возвращенными результатами.
Ответ 3
Это просто означает, что у вас есть два или более ViewUpdates с одним и тем же представлением.