«По запросу ничего не найдено, хотя ожидалась хотя бы одна строка». Запрос должен отображать записи, хотя в Symfony - PullRequest
4 голосов
/ 19 августа 2011

Я пытаюсь получить контент, используя два элемента в URL. Вот код php / symfony, который должен это сделать:

    $em = $this->getDoctrine()->getEntityManager();

    $repository = $this->getDoctrine()
        ->getRepository('ShoutMainBundle:Content');

    $query = $repository->createQueryBuilder('p')
        ->where('p.slug > :slug')
        ->andWhere('p.subtocontentid > :parent')
        ->setParameters(array(
                    'slug' => $slug,
                    'parent'  => $page
                ))
        ->getQuery();

    $content = $query->getSingleResult();

Однако, когда этот код выполняется, он возвращает следующую ошибку:

Не найдено результатов для запроса, хотя ожидалась хотя бы одна строка.

Я провел несколько тестов, и данные, хранящиеся в переменных $slug и $page, содержат правильную информацию. Я также проверил запрос MySQL, и запрос выдает желаемый результат, что еще больше смущает меня.

Я что-то пропустил?

Ответы [ 4 ]

8 голосов
/ 14 августа 2015

Как ответили здесь

Вы получаете эту ошибку, потому что используете метод getSingleResult().он генерирует исключение, если не может найти ни одного результата.вместо этого вы можете использовать getOneOrNullResult(), чтобы получить значение NULL, если по запросу нет результатов.

Query # getSingleResult (): Получает одинобъект.Если результат содержит более одного объекта, генерируется исключение NonUniqueResultException.Если результат не содержит объектов, генерируется исключение NoResultException.Чистое / смешанное различие не применяется.

3 голосов
/ 30 июля 2014

Не найдено результатов для запроса, хотя ожидалась хотя бы одна строка.

Другая причина может быть:

Вы сделали это

$query = $this->getEntityManager()
            ->createQuery('
                SELECT u FROM MyBundle:User u
                WHERE u.email = :email')
            ->setParameter('email', $email);

return $query->getSingleResult();

Вместо этого

$query = $this->getEntityManager()
            ->createQuery('
                SELECT u FROM MyBundle:User u
                WHERE u.email = :email')
            ->setParameter('email', $email);

$query->setMaxResults(1);

return $query->getResult();
3 голосов
/ 19 августа 2011

Разве вы не хотите использовать "=" вместо ">"?

0 голосов
/ 07 апреля 2019

Если вы получили это сообщение, потому что использовали

$content = $query->getSingleResult();

Вы можете просто заменить его на строку ниже

$content = $query->getOneOrNullResult(AbstractQuery::HYDRATE_SINGLE_SCALAR) ?? 0;
...