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を保持しますが、これは私が期待したものであり、他はnullです。どうしたの?($ em-> flush();を呼び出す必要があるとは言わないでください。)

4

2 に答える 2

1

UserDoctrine は、クエリからname プロパティが設定されたオブジェクトを具体的に要求していることを認識できないためtest、DB をクエリし (キャッシングメカニズムを無視して)、結果セットをエンティティオブジェクトにマップし、それらをエンティティマネージャにロードして、の配列を返します。データが見つかった場合はエンティティ オブジェクト。したがって、ここにはエンティティ マネージャは関与しません。Doctrine は最初にエンティティ マネージャーをチェックし、見つからない場合は DB をクエリするため、find($id)代わりに使用した場合は状況が異なります。findBy()

于 2012-09-23T23:05:17.967 に答える
0

$結果2

testこれは、次の名前を持つすべてのエンティティを保持する配列を返します。

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

レコードを 1 つだけ取得するには、次findOneByの代わりに使用する必要がありfindByます。

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

$result3

では、次の代わりに$result3呼び出す必要があります。$q->getSingleResult()$q->getResult()

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