Pilih bidang dari dua tabel menggunakan db_select ()


15

Saya menggunakan db_select()dan saya tidak mengerti sintaks fields()metode ini. Saya menggunakan a join()untuk bergabung dengan tabel lain. Jadi untuk meja tdan 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 fields(). Contoh yang saya lihat hanya menentukan bidang untuk satu tabel:

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

Sintaks apa yang ingin saya gunakan?

Jawaban:


28

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.


2

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 pernah bertanya di IRC dan tidak mendapat tanggapan dari siapa pun. Jadi, jika Anda memiliki yang tersisa dari D6, mereka akan tetap berfungsi.


3
Menggunakan db_query () tidak masalah (sebenarnya disarankan untuk alasan kinerja) kecuali ada alasan eksplisit untuk menggunakan db_select (). Saya telah menjabarkan alasan-alasan itu di sini: drupal.stackexchange.com/questions/1200/…
Berdir

Bagus! Saya terlalu malas untuk mengubah milik saya. ;)
colan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.