2010-06-11 58 views
2

我需要從多個相關表中執行DQL刪除。 在SQL是這樣的:DQL從多個表中刪除(原則)

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 (?)) 

搜索谷歌和堆棧溢出,我發現這個(有用的)話題:
What is the syntax for a multi-table delete on a MySQL database using Doctrine? 但是,這不正是我的情況 - 有從單表中刪除

如果有一種方法可以覆蓋DQL解析器的行爲?或者是否有其他方法可以使用doctrine從多個表中刪除記錄?

注意:如果您使用的是doctrine行爲(Doctrine_Record_Generator),您需要首先使用Doctrine_Core::initializeModels()對這些表進行初始化,以對它們執行DQL操作。

回答

0

如果他們相關的,這樣$ ID將同時刪除:

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

這應該做的工作。

0

嘗試:

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

,告訴我是怎麼回事