【问题标题】:How to delete all joined entities in the single DQL如何删除单个 DQL 中的所有连接实体
【发布时间】:2012-05-09 18:35:25
【问题描述】:

我有这样一个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 时,它会给我一个错误

[Semantical Error] line 0, col 7 near 'i, p, d, d2,': Error: Class 'i' is not defined.

【问题讨论】:

    标签: php doctrine-orm dql


    【解决方案1】:

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

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

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

    考虑到底层 RDBMS 支持 DELETE 查询中的 JOIN,替代方法是原生查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 2021-11-05
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多