sin*_*ger 5 doctrine multiple-tables
我需要从多个相关表执行 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)
Run Code Online (Sandbox Code Playgroud)
我需要使用 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());
?>
Run Code Online (Sandbox Code Playgroud)
但是 DQL 解析器给了我这个结果:
DELETE FROM `com_realty_objects_phones`, `ComRealty_objects`
WHERE (`id` IN (?) AND `id_object` IN (?))
Run Code Online (Sandbox Code Playgroud)
搜索谷歌和堆栈溢出我发现这个(有用)主题:
What is the syntax for a multi-table delete on a MySQL database using Doctrine?
但这不完全是我的情况 - 有从单个表中删除。
是否有办法覆盖 DQL 解析器行为?或者是否有其他方法可以使用学说从多个表中删除记录?
注意:如果您使用的是 Doctrine Behaviours(Doctrine_Record_Generator),您需要首先初始化这些表,Doctrine_Core::initializeModels()以便对其执行 DQL 操作。
如果它们相关,那么 $ids 将删除两者:
->delete()
->from('ComRealtyObjects c, c.ComRealtyObjectsPhones p')
->whereIn('c.id', '?', $ids)
Run Code Online (Sandbox Code Playgroud)
那应该可以完成工作。
| 归档时间: |
|
| 查看次数: |
5619 次 |
| 最近记录: |