web-gelistirme-sc.com

Db_select () kullanarak iki tablodan alan seçin

db_select() kullanıyorum ve fields() yönteminin sözdizimini anlamıyorum. Başka bir tabloya katılmak için join() kullanıyorum. Yani t ve n tabloları için,

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

Sahibim

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

Ama gördüğünüz gibi, ben fields() 'de kayboldum. Gördüğüm örnekler sadece bir tablo için alanları belirtiyor:

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

Kullanmak istediğim sözdizimi nedir?

15
user1359

Kolay, alanları () iki kez çağırmanız yeterlidir.

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

Çoğu yöntemi birden çok kez çağırabilirsiniz (birden çok alan, birden çok koşul, birden çok sıralama düzeni, birden çok birleştirme, ...).

Örneğimde gösterildiği gibi, join () çağrısının ayrı olması ve "zincirleme" yapılamaması gerektiğini unutmayın (bu, bir satırda birden çok yöntem çağrısı olması için teknik terimdir) çünkü sorgu nesnesini döndürmez, ancak tablo diğer adı.

28
Berdir

Örtülü bir birleşim, fantezi bir şey yapmıyorsanız db_query () ile çalışmaya devam eder. Bunun kötü bir uygulama olup olmadığından emin değilim. Bir kez sordum IRC ve kimseden bir yanıt alamadım. D6'dan kalanlardan herhangi birine sahipseniz, yine de çalışırlar.

2
colan