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();
}
答案 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()