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


How to delete all joined entities in the single 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"。

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

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

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

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