2012-02-10 13 views
8

Decir que tengo las siguientes clases:Cómo eliminar entidades de forma masiva en una relación ManyToMany en Doctrine 2?

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

class PaymentMethod 
{ 
} 

Cuando borramos (o simplemente desactivar, sin llegar a eliminar de la base de datos) una PaymentMethod, nos gustaría que este paymentMethod consigue quitado de todas las colecciones Store::$paymentMethods.

Hasta ahora, hemos estado usando consultas SQL primas en la tabla de unión para esto:

DELETE FROM StorePaymentMethod WHERE paymentMethodId = ? 

¿Hay una manera de hacer que en Doctrina, preferiblemente en DQL?

+0

déjenme aclarar esto. ¿Desea eliminar los métodos de pago eliminados de la lista en la clase Store? borrarlo de la base de datos no lo eliminará de la lista. – jere

+0

Si es muchos a muchos, ¿no puede simplemente establecer la colección '$ stores' en' PaymentMethod' en una colección vacía y persistir? Debería invalidar todos los objetos 'Store' en la memoria para asegurarse de que sus enlaces recíprocos no conserven los registros. Aunque en un mundo ideal, los métodos de acceso que escribes para realizar el vacío irían a través de las 'Tiendas 'eliminando los enlaces recíprocos. – Orbling

Respuesta

-2

¿Algo en esta línea?

$qb = $em->createQueryBuilder(); 

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

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

StorePaymentMethod no es una entidad, es solo la tabla de unión. ¡Entonces en DQL no tiene ningún significado por desgracia! – Benjamin

Cuestiones relacionadas