2012-02-10 1 views
8

Скажем, у меня есть следующие классы:Как объединить удаление объектов в отношениях ManyToMany в Doctrine 2?

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

class PaymentMethod 
{ 
} 

Когда мы удалить (или просто отключить, без фактического удаления из базы данных) в PaymentMethod, мы хотели бы, что это paymentMethod получает удалены из всех Store::$paymentMethods коллекций.

До сих пор мы использовали необработанные запросы SQL на столе перехода для этого:

DELETE FROM StorePaymentMethod WHERE paymentMethodId = ? 

Есть ли способ сделать это в Учении, предпочтительно в DQL?

+0

позвольте мне получить это прямо. вы хотите удалить удаленные способы оплаты из списка в классе Store? удаление его из БД не приведет к его удалению из списка. – jere

+0

Если это много, вы можете не просто установить коллекцию '$ stores' в' PaymentMethod' в пустую коллекцию и сохранить ее? Вам нужно будет аннулировать все объекты «Store' в памяти, чтобы гарантировать, что их взаимные ссылки не сохраняют записи. Хотя в идеальном мире методы доступа, которые вы пишете для выполнения пустого, будут проходить через «Магазины», удаляя взаимные ссылки. – Orbling

ответ

-2

Что-то в этом роде?

$qb = $em->createQueryBuilder(); 

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

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

StorePaymentMethod не является сущностью, это только таблица соединений. Так что в DQL он не имеет никакого значения, к сожалению! – Benjamin