Symfony2简单查询:无法获取对象,只能获取数组

时间:2015-02-11 07:13:12

标签: symfony

Symfony2.6中的以下查询适用于getArrayResult();但不适用于getResult();或getOneOrNullResult();.这意味着我无法获取对象而只能获取数组 如果我使用此查询,我得到的只是一个白色/空白页面(甚至不是symfony调试工具栏)。请注意,在我的twig模板中,我只执行查询结果的{{dump()}}。

表格结构很简单(这是用户阅读的书籍清单):
id,用户,书籍,状态,投票,评论
(用户,书籍和状态是外键)

public function selectOneRecordBy2Ids($user_id, $book_id)
{
    /* @var $qb QueryBuilder */
    $qb = $this->createQueryBuilder('l');
    $qb->select('l');
    $qb = $qb->Where($qb->expr()->eq('l.user', ':first'));
    $qb = $qb->andWhere($qb->expr()->eq('l.book', ':second'));
    $qb = $qb->setParameters(array('first' => $user_id, 'second' => $book_id));
    return $qb->getQuery()->getOneOrNullResult();



}

2 个答案:

答案 0 :(得分:1)

我注意到这里有一些不好的做法,所以让我纠正一下:

public function selectOneRecordBy2Ids(User $user, Book $book)
{
    /* @var $qb QueryBuilder */
    $qb = $this->createQueryBuilder('l');
    $qb
        ->andWhere($qb->expr()->eq('l.user', ':first'))
        ->andWhere($qb->expr()->eq('l.book', ':second'))
        ->setParameters(array('first' => $user, 'second' => $book));
    return $qb->getQuery()->getResult();
}

如果您只使用一个实体并且不获取任何关系,则不需要选择。 QB返回$this,因此您可以链接方法调用。

尝试使用实体作为参数而不是基本类型(如果可能)。如果没有,那么你必须在QB中使用基元类型作为基元。在这种情况下,您需要一些连接:

->select('l')
->join('l.user', 'u')
->join('l.book', 'b')
->andWhere($qb->expr()->eq('u.id', ':first'))
->andWhere($qb->expr()->eq('b.id', ':second'))
->setParameters(array('first' => $user_id, 'second' => $book_id));

如果您只想获取一条记录,则可能必须通过设置最大结果来限制结果:

->setMaxResults(1)

我希望这有助于解决你原来的问题。

答案 1 :(得分:0)

getOneOrNullResult()不返回记录,但会告诉您是否找到数据库中的任何记录。 您可能想要使用getSingleResult()