我可以强制 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));
在此示例中,$expectingMichaelJordanUserEntity
是 null
,因为实体尚未保存到数据库中。它不应该首先在实体管理器内部查找持久化实体吗?
是这个意思还是有办法让我的示例成为 return 持久化的 User
实体?
您正在向学说询问 findOneBy
数据库中的那些标准。在您的情况下,它 return 为空,但如果您的数据库中有这样的用户 firstName = 'Michael' AND lastName = 'Jordan'
,它也可以 return 一条记录。
此query
的结果与您新创建的用户无关。
如果它 return 来自 EntityManager
的用户,那么您将不知道它是来自数据库还是来自内存。
我预计 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));
在此示例中,$expectingMichaelJordanUserEntity
是 null
,因为实体尚未保存到数据库中。它不应该首先在实体管理器内部查找持久化实体吗?
是这个意思还是有办法让我的示例成为 return 持久化的 User
实体?
您正在向学说询问 findOneBy
数据库中的那些标准。在您的情况下,它 return 为空,但如果您的数据库中有这样的用户 firstName = 'Michael' AND lastName = 'Jordan'
,它也可以 return 一条记录。
此query
的结果与您新创建的用户无关。
如果它 return 来自 EntityManager
的用户,那么您将不知道它是来自数据库还是来自内存。