2014-01-07 68 views
1

我有一個實體,我需要堅持,如果它不存在和更新/如果它存在替換。「REPLACE」種類堅持Doctrine2 EntityManager

我不想使用->findBy()查找並執行更新或新操作。

有了Doctrine1,您可以簡單地創建一個新實體並使用方法->replace();而不是->save();。我有點需要使用EntityManager的Doctrine2的這種行爲。

<?php 
$user = new User; 
$user->setName('Mr.Right'); 
$em->persist($user); 
$em->flush(); 

http://docs.doctrine-project.org/en/latest/reference/working-with-objects.html#persisting-entities

如果X是一個已經存在的管理實體,它是由持續 操作忽略。

我需要預先存在的管理實體進行替換/更新,不會被忽略, 有人知道嗎?

+0

你有沒有找到答案呢? –

+0

@PavelDubinin nope,但說實話我很久以前就退出尋找解決方案 – DanFromGermany

回答

2

我不確定這可能不執行原始查詢。但爲什麼你不想先查找它?我會使用以下:

$user = $em->find('User', $id); 
if (!$user) { 
    $user = new User; 
    $em->persist($user); 
} 
$user->setName('Mr.Right'); 
$em->flush(); 
+0

這就是我的atm,但如果你有200k個實體,使用200k xa單個'REPLACE'而不是200k x'SELECT'要快一點。 +'if' +'UPDATE' /'INSERT' – DanFromGermany

+0

不支持替換的原因(不再是?)可能是因爲並非所有平臺都支持它。要麼使用原始查詢進行批處理,要麼查看http://docs.doctrine-project.org/en/latest/reference/batch-processing.html – sroes

+0

hmm好吧..會做更多的研究或者簡單地使用'find'。 +1爲你的努力和幫助,謝謝! – DanFromGermany