“虽然预计至少有一行,但没有找到查询结果。”查询应该在Symfony中显示记录

时间:2011-08-19 14:21:42

标签: mysql doctrine doctrine-orm symfony

我正在尝试使用网址中的两个项目检索内容。这是应该执行的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 个答案:

答案 0 :(得分:8)

回答here

  

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

     

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

  

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

另一个原因可能是:

你这样做了

$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 :(得分:0)

如果由于使用而收到此消息

<div class="drawer">
    <header>
    </header>
    <ul>
        <li>
            <div class="list_item">
                <div class="details">
                    <svg>
                    <span>somettttttttttttttttttttttt</span>
                </div>
                <timestamp/>
             </div>
        </li>
   </ul>
</div>

.drawer {
     display: flex;
     flex-direction: column;
     position: absolute;
     width: 320px;
     top: 55px;
     right: 18px;
     min-height: 40%;
     max-height: 80%;
     overflow: scroll;
     overflow-x: hidden;


     header {
         min-height: 38px;
         border-bottom: 1px solid #CCCCCC;
         display: flex;
         align-items: center;
         justify-content: space-between;
         padding-right: 0px;
         padding-top: 2px;
    }}


.list_item {
    display: flex;
    flex-direction: row;
    align-items: center;
    padding: 4px;

    svg {
        margin-right: 6px;
    }

   .details {
        flex-grow: 1;
        align-items: center;

   }}

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

$content = $query->getSingleResult();