db_select()を使用して2つのテーブルからフィールドを選択します


15

私は使用db_select()していますが、fields()メソッドの構文を理解していません。join()別のテーブルを結合するためにa を使用しています。だからテーブルtn、私は次のようなことをしたい

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'))

使用したい構文は何ですか?

回答:


28

簡単で、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()の呼び出しは別個である必要があり、クエリオブジェクトを返さないがテーブルエイリアスの名前。


2

特別なことをしていない場合でも、暗黙的な結合はdb_query()で機能します。これが悪い習慣かどうかはわかりませんが。IRCで一度尋ねたところ、誰からも返事がありませんでした。したがって、D6から残ったものがあれば、それらは引き続き機能します。


3
db_select()を使用する明確な理由がない限り、db_query()の使用はまったく問題ありません(実際にはパフォーマンス上の理由から推奨されています)。:私はここでそれらの理由概説しましdrupal.stackexchange.com/questions/1200/...
Berdir

すごい!とにかく変換​​するのが面倒でした。;)
colan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.