2

多対多の関係で特定のペアに一致するかどうかに基づいて、2つのテーブルを結合しようとしています。私は、作成しようとしているSQLステートメントをすでに知っています。これは、機能的には次と同等です。

SELECT columnA, columnB, ...
...
JOIN matching_table
    ON ( (matching_table.id1 = table_a.id AND matching_table.id2 = table_b.id) OR
         (matching_table.id1 = table_b.id AND matching_table.id2 = table_a.id) )
...

しかし、一貫性を保つために、Kohanaのクエリビルダーを使用して作成したいと思います。ON問題は、複雑なクエリを作成する方法が見つからないように見えることです。これまでのところ、私が持っているのは

DB::select('columnA', 'columnB', ...)
...
    ->join('matching_table')
        ->on('matching_table.id1', '=', 'table_a.id')
        ->on('matching_table.id2', '=', 'table_b.id')
...

これにより最初のシーケンスが生成されますが、。ANDと一緒にまとめることができないようですOR

助言がありますか?

4

1 に答える 1

0

onの代わりにwhereを使用できるはずです(ただしテストされていません):

->join('matching_table')
->where_open()
->where('matching_table.id1', '=', 'table_a.id')
->and_where('matching_table.id2', '=', 'table_b.id')
->where_close()
->or_where_open()
->where('matching_table.id1', '=', 'table_b.id')
->and_where('matching_table.id2', '=', 'table_a.id')
->or_where_close()
于 2012-10-26T08:53:45.123 に答える