db_select()
を使用していますが、fields()
メソッドの構文がわかりません。別のテーブルを結合するためにjoin()
を使用しています。したがって、テーブルt
とn
の場合、次のようなことをしたい
_SELECT t.tid, t.field1, t.field2, n.title, n.author
FROM table t INNER JOIN node n ON t.nid = n.nid;
_
私が持っています
_$results = db_select('table', 't')
->fields( ... )
->join('node', 'n', 'n.nid = t.nid')
->execute();
_
しかし、ご覧のとおり、私はfields()
で迷っています。私が見た例では、1つのテーブルのフィールドのみを指定しています。
_->fields('t', array('tid', 'field1', 'field2'))
_
使用したい構文は何ですか?
簡単です。fields()を2回呼び出すだけです。
$query = db_select('table', 't');
$query->join('node', 'n', 'n.nid = t.nid');
$result = $query
->fields('t', array('tid', 'field1', 'field2'))
->fields('n', array('nid', 'field1', 'field2'))
->execute();
foreach ($result as $row) {
// Do something with $row.
}
ほとんどのメソッドを複数回呼び出すことができます(複数のフィールド、複数の条件、複数の並べ替え順序、複数の結合など)。
私の例に示すように、join()の呼び出しは個別にする必要があり、「連鎖」できない(これは、複数のメソッド呼び出しを続けて行うことを表す専門用語です)ため、クエリオブジェクトは返されませんが、テーブルエイリアスの名前。
特別なことをしていなければ、暗黙的な結合はdb_query()でも機能します。これが悪い習慣かどうかはわかりませんが。 IRC=で一度尋ねたところ、誰からも返事がありませんでした。そのため、D6から残っているものを持っている場合でも、それらは動作します。