使用doctrine加载一条记录的首选方法是什么?
我正在使用
$em = EntityManager::create($connectionOptions, $config);
$dql = "select r from Rolle r";
$list = $em->createQuery($dql)->getResult();
获取记录列表。
我尝试使用
$dql = Doctrine_Query::create()
->from('Rolle r')
->where('r.ID = 14');
$rolle = $dql->fetchArray();
获得一条记录。这是首选方式吗?
如果是:我收到内部服务器错误:在线上找不到类'Doctrine_Query'......
我搜索了一个包含字符串'Doctrine_Query'的文件,但我没有这样的文件。那么我在哪里可以找到这门课程?
答案 0 :(得分:14)
您可以使用getSingleResult()
代替getResult()
。这是在学说文档的this章节中的文档。
答案 1 :(得分:8)
我认为你正在寻找getOneOrNullResult()
。
当scube回答时,getSingleResult()
也可以正常工作,但是此方法会强制执行结果的唯一性,如果您的查询匹配多条记录,则会抛出NonUniqueResultException
。现在距离scube的答案差不多一年了,当时情况可能并非如此。
信用: Cerad和m2mdas的评论/回答here引导我getOneOrNullResult()
。
答案 2 :(得分:6)
正如我所说here,你不能使用getSingleResult()
或getOneOrNullResult()
从行中选择第一行,因为如果查询返回多个结果,这些函数会抛出异常。要解决此问题,您可以将setMaxResults(1)
添加到查询构建器。
$firstSubscriber = $entity->createQueryBuilder()->select('sub')
->from("\Application\Entity\Subscriber", 'sub')
->where('sub.subscribe=:isSubscribe')
->setParameter('isSubscribe', 1)
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();