2012-02-10 9 views
8

że mam następujące klasy:Jak usunąć wiele elementów w relacji ManyToMany w Doctrine 2?

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

class PaymentMethod 
{ 
} 

Kiedy usunąć (lub po prostu wyłączyć, bez faktycznie usunięcie z bazy danych) w PaymentMethod chcielibyśmy że ten paymentMethod zostanie usunięty ze wszystkich Store::$paymentMethods kolekcjach.

Do tej pory używaliśmy surowe zapytań SQL na stole połączeniowej za to:

DELETE FROM StorePaymentMethod WHERE paymentMethodId = ? 

Czy istnieje sposób, aby to zrobić w doktrynie, najlepiej w DQL?

+0

Pozwól, że to wyjaśnię. chcesz usunąć usunięte metody płatności z listy w klasie Sklep? usunięcie go z DB nie usunie go z listy. – jere

+0

Jeśli jest to wiele do wielu, czy nie możesz po prostu ustawić kolekcji '$ stores' w' PaymentMethod' na pustą kolekcję i kontynuować ją? Będziesz musiał unieważnić wszystkie obiekty "Store" w pamięci, aby upewnić się, że ich wzajemne powiązania nie zachowały rekordów. Chociaż w idealnym świecie, metody accessorów, które piszesz, aby wykonać puste, przechodzą przez 'Sklepy' usuwające odwrotne linki. – Orbling

Odpowiedz

-2

Coś w tym stylu?

$qb = $em->createQueryBuilder(); 

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

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

StorePaymentMethod nie jest jednostką, to tylko tabela dołączania. Tak więc w DQL nie ma to niestety znaczenia! – Benjamin