【问题标题】:"No result was found for query although at least one row was expected." Query should display records though in Symfony“虽然预计至少有一行,但没有找到查询结果。”查询应该在 Symfony 中显示记录
【发布时间】:2011-08-19 14:21:41
【问题描述】:

我正在尝试使用 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 查询,查询得到了想要的结果,这让我更加困惑。

我错过了什么吗?

【问题讨论】:

    标签: mysql doctrine doctrine-orm symfony


    【解决方案1】:

    正如回答here

    您收到此错误是因为您使用的是 getSingleResult() 方法。如果找不到,它会生成一个异常 甚至一个结果。您可以改用getOneOrNullResult() 如果查询没有任何结果,则获取 NULL。

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

    【讨论】:

      【解决方案2】:

      虽然预期至少有一行,但未找到查询结果。

      另一个原因可能是:

      这是你做的

      $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】:

        您不想使用“=”而不是“>”吗?

        【讨论】:

        • 我什至没有注意到!现在墙上有一个头部形状的凹痕。谢谢你!
        【解决方案4】:

        如果您收到此消息是因为使用过

        $content = $query->getSingleResult();
        

        您可以将其替换为下面的行

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

        【讨论】:

        • 不,实际上我的意思是 SingleScalarResult 作为这个问题的部分案例。我写这个是因为我在谷歌搜索中得到了这个页面
        猜你喜欢
        • 2015-05-27
        • 1970-01-01
        • 2022-08-17
        • 2015-11-21
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        相关资源
        最近更新 更多