2012-02-10 27 views
8

は、私は以下のクラスがあるとしましょう:我々は削除すると Doctrine 2でManyToMany関係のエンティティを一括で削除する方法は?

class Store 
{ 
    /** 
    * @ManyToMany(targetEntity="PaymentMethod") 
    */ 
    protected $paymentMethods; 
} 

class PaymentMethod 
{ 
} 

PaymentMethod(あるいは単に、実際にデータベースから削除せず、無効)、私たちはこの paymentMethodはすべて Store::$paymentMethodsのコレクションから削除されることをしたいと思います。今まで

、我々はこのために、接合テーブルの上に生のSQLクエリを使用してきた:

DELETE FROM StorePaymentMethod WHERE paymentMethodId = ? 

は教義では、好ましくはDQLでいることを実行する方法はありますか?

+0

私はこれをまっすぐにしましょう。削除された支払い方法をStoreクラスのリストから削除しますか? DBから削除してもリストからは削除されません。 – jere

+0

これは多対多の場合、 'PaymentMethod'の' $ stores'コレクションを空のコレクションに設定して永続化できませんか?その相互リンクがレコードを保持しないように、メモリ内のすべての 'Store'オブジェクトを無効にする必要があります。理想的な世界では、あなたが空を実行するために書くアクセサメソッドは、相互リンクを削除する 'Stores'を通過するでしょう。 – Orbling

答えて

-2

これらの行に何かがありますか?

$qb = $em->createQueryBuilder(); 

$qb->delete('StorePaymentMethod', 'spm') 
    ->where('spm.paymentMethodId = : paymentMethodId') 
    ->setParameter('paymentMethodId', $id); 

return $qb->getQuery()->getResult(); 
+1

StorePaymentMethodはエンティティではなく、単に結合テーブルです。したがって、DQLでは残念ながら意味がありません! – Benjamin

関連する問題