原则2:查询方式不同,结果不同



有人可以解释一下,为什么我得到不同的结果吗?

$user = new UserEn();
$user->setName("test");
$em->persist($user);
$result1 = $em->find('UserEn', 'test');
$result2 = $em->getRepository('UserEn')->findBy(array('name'=>'test'));
$q = $em->createQuery('select u from UserEn u where u.name = :name');
$q->setParameter('name', 'test');
$result3 = $q->getResult();

只有 $result 1 持有$user,这是我所期望的,其他都是空的。怎么了?(请不要说我需要调用$em->flush();

因为 Doctrine 无法确定您正在专门请求一个 name 属性设置为从查询中testUser 对象,所以它会查询 DB(忽略缓存机制),将结果集映射到实体对象,在实体管理器中加载它们,如果找到任何数据,则返回实体对象数组。因此,这里没有实体经理的参与。如果您使用 find($id) 而不是 findBy(),情况会有所不同,因为现在 Doctrine 将首先检查实体管理器,如果未找到,则查询数据库。

$result 2

这将返回一个数组,该数组保存所有以 test 作为名称的实体:

$result2 = $em->getRepository('UserEn')->findBy(array('name'=>'test'));

为了只获得一条记录,您应该使用 findOneBy 而不是 findBy

$result2 = $em->getRepository('UserEn')->findOneBy(array('name'=>'test'));

$result 3

$result3中,您应该调用$q->getSingleResult()而不是$q->getResult()

$result3 = $q->getSingleResult();

相关内容

  • 没有找到相关文章

最新更新