2016-07-18 9 views
0

Ich habe den folgenden Code. Die Code-Spalte von Part erfordert einen eindeutigen Wert und daher gibt es einen Fehler, wenn ich remove(), dann persist() eine Zeile mit dem gleichen Code-Wert. Die Zeile soll jedoch zuerst entfernt werden, so dass nur ein Wert vorhanden ist. Muss ich flush() zwischen diesen Befehlen ausführen?Doktrin: entfernen, dann mit eindeutigen Werten

 if ($existingPart) { # we found one 
      if ($existingPart->getPrice() != $part->getPrice()) { # price changed 
       $em->remove($existingPart); #soft-delete the old one 
       $em->persist($part); # persist the new part 
       $countUpdates++; # get number of updated entities 
      } 
     } else { 
      $em->persist($part); # no existing part with same code, just add new part 
      $count++; # get number of new commits  
     }      
    } 

    $em->flush(); 

Antwort

1

Ah. Ich habe herausgefunden warum: Ich benutze softdeletable. Was ich tun musste, ist den einzigartigen Wert Flag aus der Spaltendefinition entfernen und eher legen Sie die folgenden in der Klasse Anmerkung:

@UniqueEntity(fields={"deletedAt","code"}) 

Dies wird es machen überprüfen, ob die Kombination von deletedAt und code einzigartig ist und nicht nur Feld.