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

Google とスタック オーバーフローを検索すると、次の (役立つ) トピックが見つかりました:
Doctrine を使用して MySQL データベースで複数テーブルを削除するための構文は何ですか? しかし、これはまさに私の場合ではありません - 単一のテーブルからの削除がありました。

DQL パーサーの動作をオーバーライドする方法はありますか? または、教義を使用して複数のテーブルからレコードを削除する他の方法がありますか?

注: doctrine ビヘイビアー (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 に答える