2016-07-18 3 views
0

次のコードがあります。 Partのコード列には一意の値が必要です。したがって、remove()、次に同じコード値の行persist()が発生すると、エラーがスローされます。しかし、行は最初に削除されるはずなので、値は1つだけです。これらのコマンドの間にflush()を実行する必要がありますか?Doctrine:一意の値を指定して削除してから続ける

 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(); 

答えて

1

ああ。私は理由を知りました:私はsoftdeletableを使用しています。私は何をするために必要なことは、列の定義から一意の値フラグを削除し、むしろクラスの注釈に次のように挿入している:

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

これは、それがdeletedAtcodeの組み合わせは、単にユニークではなく、あるかどうかをチェックするようになりますフィールド。

関連する問題