我的问题可能是this one的重复,但我找不到任何令人满意的答案,所以我会尝试使这一个更加精确。在教义中检查是否存在持久性和非持久性实体
我正在从其他API构建导入服务。我不想在我的新数据库中有任何重复。
所以在这里我目前实现的例子:
控制器:
public function mainAction()
{
$em = $this->getDoctrine()->getManager();
$persons_data = [
[
'first_name' => 'John',
'last_name' => 'Doe'
],
[
'first_name' => 'John',
'last_name' => 'Doe'
]
];
$array = [];
foreach($persons_data as $person_data)
{
$person = $this->get('my_service')->findOrCreatePerson($person_data);
$array[] = $person;
}
$em->flush();
return new Response();
}
服务功能:
public function findOrCreatePerson ($data)
{
$em = $this->em;
$person = $em->getRepository('AppBundle:Person')->findOneBy([
'first_name' => $data['first_name'],
'last_name' => $data['last_name']
]);
if(is_null($person)) {
$person = new Person();
$person->setFirstName($data['first_name']);
$person->setLastName($data['last_name']);
$em->persist($person);
}
return $person
}
我试图使它尽可能简单。如你所见,我只想做一个数据库事务来获得一些性能改进。
问题是,如果在findOrCreatePerson()
方法末尾没有刷新,对Person
存储库的查询将找不到第一个对象,并且会在数据库中创建重复项。
我的问题很简单:我该如何实现这样的事情?
很好的事情要知道,谢谢! – Hammerbot