7

他の変更を保持せずに、エンティティを削除しようとしています。(この特定の状況では実際には必要ありませんが) メソッドはflush()、アクションの後に呼び出された a の結果に影響を与えるべきではないことに注意してください。

$em->remove($entity);
$em->flush($entity);

それは . をスローし'InvalidArgumentException' with message 'Entity has to be managed for single computationます。

DQL を使用して削除できます。エンティティマネージャーを介してそれを行う方法があるかどうか疑問に思っていました.

4

3 に答える 3

3

私はトランザクションを忘れていました。これはテストする必要があります:

// $em instanceof EntityManager
$em->transactional(function($em) {
    $em->remove($entity);
});

トランザクションの前後に変更されたエンティティが明示的なトランザクションに含まれていない場合、トランザクションを使用できるかどうかはわかりません。

于 2012-12-15T13:33:36.660 に答える
2

これを試してください:

  1. 現在のEMからエンティティを切り離します。

    $em->detach($entity);  
    
  2. EMの新しいインスタンスを作成し、それを使用して以下を削除します。

    $em2->remove($entity);
    $em2->flush();   
    

clear()または、次のように、EMからすべてのエンティティをデタッチする方法を使用できます。

$em->clear();
$em->remove($entity);
$em->flush(); 
于 2012-12-15T12:49:14.970 に答える
1

簡単な解決策は次のとおりです。

$entity = $em->manage($entity);
// $entity now refers to the fully managed copy returned by the merge operation.
// The EntityManager $em now manages the persistence of $entity as usual
$em->remove($entity);
$em->flush();
于 2013-09-16T14:47:33.727 に答える