2010-06-11 4 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 (?)) 

Поиск Google и стека переполнения Я нашел (полезный) тему:
What is the syntax for a multi-table delete on a MySQL database using Doctrine? Но это не совсем мое дело - там было удалено из одной таблицы.

Если есть способ переопределить поведение парсера DQL? Или может быть какой-то другой способ удалить записи из нескольких таблиц с помощью доктрины?

Примечание: Если вы используете поведение доктрины (Doctrine_Record_Generator), вам нужно сначала инициализировать эти таблицы с помощью Doctrine_Core::initializeModels() для выполнения операций DQL.

ответ

0

Если они связаны с тем, что $ Идентификаторы удалит как:

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

и скажите мне, как это идет