私はpropel ORMを使ってsymfonyプロジェクトに取り組んでいます。私のモデルでは、私はその要素が別のテーブル(リンクテーブル)によって、同じテーブルの多くの要素とリンクすることができるテーブルを持っています。いくつかのコードは、より良い説明します:基準双方向結合?
table1:
id_element: integer;
[...]
とリンクテーブル:
link_table:
id1: fk to table1;
id2: fk to table1;
私は私に特定の要素を持つすべての関連要素を返すPropelの基準でクエリを構築する必要があります。問題は、私が指定したい要素は、リンクテーブルのid2フィールドのようにid1フィールドのようにすることができるということです。
今、私の基準定義コード(明らかに動作していない)
$c = new Criteria();
$c->addJoin($linkTable::ID1,$table::ID);
$c->addJoin($linkTable::ID2,$table::ID);
$c->addOr($linkTable::ID1,$specific_id);
$c->addOr($linkTable::ID2,$specific_id);
$result = $table->doSelect($c);
の一部と、これは私が生成するようなSQLです:
SELECT * FROM table
WHERE table.ID IN
(SELECT link_table.ID1 FROM link_table
WHERE link_table.ID2 = "the id that i want"
)
OR table.ID IN
(SELECT link_table.ID2 FROM link_table
WHERE link_table.ID1 = "the id that i want"
)
だから私がしなければならない2は、1に参加しますリンクテーブルの各側に? 「or-join
」を実行する方法はありますか?私を助けてください!
は、たぶん私はよくあなたが必要とするものを理解していない:)
多分あなたは解決策を考えるべきです。この種の再帰的な動作はリレーショナルデータベースでは推奨されません。あなたは、このモデルが何を表現しようとしているかについてもう少し詳しく知ることができますか?ほとんどの場合、私は複雑なクエリで自分自身を見つけることができます。これは、ほとんどの場合、問題が解決したとは思えませんでした。 – guiman
以下の表はプロセスを表しています。これらのプロセスは他のプロセスと関連していて、そこに多面的な関係が形成されていて、この関係はリンクテーブルとして実装されなければなりません。 –