2009-07-15 16 views
22

我想在INSERT OR UPDATE IF EXISTS在一個事務中。實施「更新如果存在」在學說ORM

mysql的,我一般會用DUPLICATE KEY(「UPDATE ON重複密鑰。」)我知道很多的解決方案,利用各種SQL的變體和子查詢這個問題,但我想實現這個在學說(PHP的ORM)。看來會有這樣做的Doctrine方法,因爲它是如此功能包裝,但我沒有找到任何東西。出於某種原因,使用PHP ORM軟件包會出現這種問題嗎?還是任何學說專家知道如何通過黑客或任何手段來實現這一點?

+0

我已經開始使用插件來實現此功能。它仍處於早期階段,但經過測試並用於我的用例。它可在以下網址獲得:https://github.com/m14t/m14tDoctrineRecordPlugin歡迎使用測試用例,錯誤報告和拉取請求。 – m14t 2012-04-19 07:39:27

+0

我認爲你應該將@ pix0r的答案標記爲解決方案 – Mojtaba 2016-10-11 20:01:40

回答

2

學說支持REPLACE INTO使用replace()方法。這應該與您所尋找的ON DUPLICATE KEY UPDATE完全一樣。

文檔:Replacing Records

+9

REPLACE的唯一問題似乎是它會丟棄,然後創建一個新行(而不是執行實際的UPDATE),從而刪除自動增量ID(在此案件,我的主要身份證)。我在這裏錯過了什麼嗎? 例如 - 我的自動增量ID爲9,但計數爲3000.當我執行REPLACE INTO第9行,新行ID爲3001. – seans 2009-07-15 17:51:50

5

我能想到的唯一的事情就是先查詢實體,如果它存在,否則創建新的實體。

if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/)) 
{ 
    $entity = new Foo(); 
} 
/*do logic here*/ 
$entity->save();