我的問題可能是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