2013-02-16 118 views
2

我有一個簡單的實體在我的項目是這樣的:學說堅持+堅持=插入+插入?

$obj = Entity\ImportResume(); 
$obj->setStatus(1); 

$em->persist($obj); 
$em->flush(); 
$em->clear(); 

$obj->setStatus(2); 

$em->persist($obj); 
$em->flush(); 
$em->clear(); 

但是主義performe 2插入,我需要1個插入和1次更新。

觀測數據:

  • ,如果我以後做的var_dump($ OBJ)第一堅持我的ID fileld充滿了數據庫ID!
  • 對我來說主義是無視第二個堅持的id,爲什麼?

任何幫助?

回答

0

我discory原因是:$ EM->清晰();

clear方法清除所有實體的狀態,並導致實體管理器上的id丟失。

Solucion:

刪除EM-$>清晰();

謝謝TimWolla!

1

如果我正在閱讀Doctrine Docs的權利persist僅在初始INSERT需要。

這一段表明,簡單地改變你的對象,然後沖洗儲存足夠:

7.3. Persisting entities

因此,這樣一個實體的持久狀態也將隨之與數據庫時,可以適當地同步調用EntityManager#flush()。

和進一步:

7.7.2. Synchronizing New and Managed Entities

沖洗操作適用於一個管理實體具有以下語義:

  • 實體本身是使用SQL同步到數據庫UPDATE語句,只有至少有一個持久性字段已更改。
  • 如果實體沒有更改,則不執行SQL更新。
0

如果是同一objetc,你可以做

$em->persist($obj); 
$obj->setStatus(1); 
$obj->setStatus(2); 
$em->flush(); 

如果是2 diferent對象

$obj1 = Entity\ImportResume(); 
$obj1->setStatus(1); 
$em->persist($obj1); 

$obj2 = Entity\ImportResume(); 
$obj2->setStatus(2); 
$em->persist($obj2); 

$em->flush(); 

只使用,如果有必要重新啓動在同一代碼的過程中「清除」方法。