用学说加载一条记录

use*_*167 3 doctrine doctrine-orm

使用doctrine加载一条记录的首选方法是什么?

我在用

$em = EntityManager::create($connectionOptions, $config);
$dql = "select r from Rolle r";
$list = $em->createQuery($dql)->getResult();
Run Code Online (Sandbox Code Playgroud)

获取记录列表.

我试过用

$dql = Doctrine_Query::create()
    ->from('Rolle r') 
    ->where('r.ID = 14');
$rolle = $dql->fetchArray();
Run Code Online (Sandbox Code Playgroud)

获得一条记录.这是首选方式吗?

如果是:我收到内部服务器错误:在线上找不到类'Doctrine_Query'...

我搜索了一个包含字符串'Doctrine_Query'的文件,但我没有这样的文件.那么我在哪里可以找到这门课?

scu*_*ube 14

您可以使用getSingleResult()而不是getResult().它documentet在这个学说文档的篇章.

  • @Scube 谢谢,刚刚在另一个问题中找到了答案,让我找到了更直接的解决方案。请参阅下面我的答案,如果您想为简洁起见更新原始答案,我很乐意删除我的答案。正如文档所建议的,`setMaxResults()` 是一个选项,但是 `getOneOrNullResult()` 更直接,因为它返回对象本身,而 `setMaxResults()` 返回数组中的对象。 (2认同)

Wil*_*orx 8

我想你在找getOneOrNullResult().

正如scube回答的那样,getSingleResult()但是这个方法也可以实现结果的唯一性,并且NonUniqueResultException如果你的查询匹配多个记录,它将抛出一个.现在距离scube的答案差不多一年了,当时情况可能并非如此.

信用: Cerad和m2mdas的评论/答案在这里引导我getOneOrNullResult().


Mos*_*aei 6

正如我在这里所说,你不能使用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();
Run Code Online (Sandbox Code Playgroud)