我试图在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查询,查询带来了所需的结果,这使我更加困惑。
就像这里回答的那样
你得到这个错误是因为你正在使用
如果查询没有任何结果,则得到NULL。getSingleResult()
方法。如果找不到,它会生成一个异常哪怕只有一个结果。你可以用getOneOrNullResult()
代替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;