5

我需要从多个相关表中执行 DQL 删除。在 SQL 中是这样的:

  DELETE r1,r2 
  FROM ComRealty_objects r1, com_realty_objects_phones r2 
  WHERE r1.id IN (10,20) AND r2.id_object IN (10,20)

我需要使用 DQL 执行此语句,但我坚持这一点。:(

<?php
$dql = Doctrine_Query::create()
     ->delete('phones, comrealtyobjects')
     ->from('ComRealtyObjects comrealtyobjects')
     ->from('ComRealtyObjectsPhones phones')
     ->whereIn("comrealtyobjects.id", $ids)
     ->whereIn("phones.id_object", $ids);
echo($dql->getSqlQuery());
?>

但是 DQL 解析器给了我这个结果:

DELETE FROM `com_realty_objects_phones`, `ComRealty_objects` 
WHERE (`id` IN (?) AND `id_object` IN (?))

搜索谷歌和堆栈溢出我发现了这个(有用的)主题:
使用 Doctrine 在 MySQL 数据库上删除多表的语法是什么? 但这不完全是我的情况 - 从单个表中删除。

如果有办法覆盖 DQL 解析器行为?或者是否有其他方法可以使用学说从多个表中删除记录?

注意:如果您使用的是学说行为(Doctrine_Record_Generator),您需要首先初始化这些表,Doctrine_Core::initializeModels()以便对它们执行 DQL 操作。

4

2 回答 2

2

尝试:

$dql = Doctrine_Query::create()
     ->from('ComRealtyObjects comrealtyobjects')
     ->from('ComRealtyObjectsPhones phones')
     ->whereIn("comrealtyobjects.id", $ids)
     ->whereIn("phones.id_object", $ids);
$result= $dql->execute();
$result->delete();

告诉我进展如何

于 2010-10-20T12:50:07.970 回答
0

如果它们是相关的,那么 $ids 将删除两者:

 ->delete()
 ->from('ComRealtyObjects c, c.ComRealtyObjectsPhones p')
 ->whereIn('c.id', '?', $ids)

那应该做的工作。

于 2010-06-11T14:58:31.547 回答