如何删除单个DQL中的所有已连接实体

时间:2012-05-09 18:35:25

标签: php doctrine-orm dql

我有这样一个dql语句:

DELETE i, p, d, d2, s
  FROM OverseerMainBundle:Image i 
    JOIN i.plates p 
    JOIN i.doc d 
    JOIN p.doc d2
    LEFT JOIN p.symbols s 
  WHERE d.tag LIKE :tag

如果我将DELETE替换为SELECT,则查询会按预期工作。但是,当我使用DELETE时,它会给我一个错误

  

[语义错误]第0行,第7列靠近'i,p,d,d2,':错误:未定义类'i'。

1 个答案:

答案 0 :(得分:1)

DQL中的DELETE查询不支持JOIN,因为某些受支持的RDBMS不支持它。

不幸的是,您必须先选择要删除的元素的ID,然后执行DELETE FROM foo WHERE bar IN (?1)并传递带有ID作为参数的数组。

从多个表中删除时,请记住使用显式事务。

另一种选择是本机查询,因为底层RDBMS支持DELETE查询中的JOIN。