我可以强制 Doctrine 2 存储库先检查 entityManager 的结果吗

Can I force Doctrine 2 repository to check entityManager for results first

我预计 Doctrine 2 存储库会首先检查 EntityManager 的结果。但事实并非如此。

此代码代表问题。

$em = $this->getEntityManager();

$firstName = 'Michael';
$lastName = 'Jordan';
$userEntity = new User($firstName, $lastName);

$em->persist($userEntity);

$userRepository = $em->getRepository('UserRepository');

$expectingMichaelJordanUserEntity = $userRepository->findOneBy(array('firstName' => $firstName, 'lastName' => $lastName));

在此示例中,$expectingMichaelJordanUserEntitynull,因为实体尚未保存到数据库中。它不应该首先在实体管理器内部查找持久化实体吗?

是这个意思还是有办法让我的示例成为 return 持久化的 User 实体?

您正在向学说询问 findOneBy 数据库中的那些标准。在您的情况下,它 return 为空,但如果您的数据库中有这样的用户 firstName = 'Michael' AND lastName = 'Jordan',它也可以 return 一条记录。

query的结果与您新创建的用户无关。

如果它 return 来自 EntityManager 的用户,那么您将不知道它是来自数据库还是来自内存。