DQL удалить из нескольких таблиц (доктрина) - PullRequest
3 голосов
/ 11 июня 2010

Мне нужно выполнить удаление 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 (?))

Поиск в Google и переполнение стека Я нашел эту (полезную) тему:
Каков синтаксис удаления нескольких таблиц в базе данных MySQL с использованием Doctrine? Но это не совсем мой случай - было удаление из одной таблицы.

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

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

Ответы [ 2 ]

0 голосов
/ 20 октября 2010

попробуйте:

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

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

0 голосов
/ 11 июня 2010

Если они связаны, так что $ ids удалит оба:

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

Это должно сделать работу.

...