用学说加载一条记录

时间:2011-12-07 09:29:37

标签: doctrine doctrine-orm

使用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'的文件,但我没有这样的文件。那么我在哪里可以找到这门课程?

3 个答案:

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