0

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

$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();

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

4

2 回答 2

1

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

于 2012-09-23T23:05:17.967 回答
0

$结果2

这将返回一个数组,其中包含具有test名称的所有实体:

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

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

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

$结果3

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

$result3 = $q->getSingleResult();
于 2012-09-22T18:09:20.570 回答