it-swarm-id.com

Pilih bidang dari dua tabel menggunakan db_select ()

Saya menggunakan db_select() dan saya tidak mengerti sintaks dari metode fields(). Saya menggunakan join() untuk bergabung dengan tabel lain. Jadi untuk tabel t dan n, saya ingin melakukan sesuatu seperti

SELECT t.tid, t.field1, t.field2, n.title, n.author 
FROM table t INNER JOIN node n ON t.nid = n.nid;

Saya sudah

$results = db_select('table', 't')
  ->fields( ... )
  ->join('node', 'n', 'n.nid = t.nid')
  ->execute();

Tapi seperti yang Anda lihat, saya bingung di fields(). Contoh yang saya lihat hanya menentukan bidang untuk satu tabel:

->fields('t', array('tid', 'field1', 'field2'))

Sintaks apa yang ingin saya gunakan?

15
user1359

Mudah, cukup panggil bidang () dua kali.

$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.
}

Anda dapat memanggil sebagian besar metode beberapa kali (beberapa bidang, beberapa kondisi, beberapa urutan, beberapa gabungan, ...).

Perhatikan bahwa, seperti yang ditunjukkan dalam contoh saya, panggilan untuk bergabung () perlu dipisah dan tidak dapat "dirantai" (itulah istilah teknis untuk memiliki beberapa metode panggilan berturut-turut) karena tidak mengembalikan objek permintaan tetapi nama untuk alias tabel.

28
Berdir

Gabung implisit masih akan bekerja dengan db_query (), jika Anda tidak melakukan sesuatu yang mewah. Saya tidak yakin apakah ini praktik yang buruk atau tidak. Saya bertanya sekali dalam IRC dan tidak mendapat tanggapan dari siapa pun. Jadi, jika Anda memiliki yang tersisa dari D6, mereka masih akan bekerja.

2
colan