関連する複数のテーブルから 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 操作を実行するためにこれらのテーブルを初期化する必要があります。