"No result was found for query although at least one row was expected."查询应该在Symfony中显示记录



我试图在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查询,查询带来了所需的结果,这使我更加困惑。

我错过什么了吗?

就像这里回答的那样

你得到这个错误是因为你正在使用getSingleResult()方法。如果找不到,它会生成一个异常哪怕只有一个结果。你可以用getOneOrNullResult()代替

如果查询没有任何结果,则得到NULL。

Query#getSingleResult():检索单个对象。如果结果是包含多个对象,则抛出NonUniqueResultException。如果结果不包含对象,则抛出NoResultException。的纯/混合区分不适用。

没有找到查询结果,尽管至少需要一行。

另一个原因可能是:

你做了这个

$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();

你不想用"="代替">"吗?

如果你收到这个消息是因为使用了

$content = $query->getSingleResult();

你可以把它替换成

下面的行
$content = $query->getOneOrNullResult(AbstractQuery::HYDRATE_SINGLE_SCALAR) ?? 0;

相关内容

最新更新