it-swarm.asia

حدد الحقول من جدولين باستخدام db_select ()

أنا أستخدم 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(). الأمثلة التي رأيتها تحدد فقط الحقول لجدول واحد:

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

ما هي الصيغة التي أريد استخدامها؟

15
user1359

سهل ، ما عليك سوى استدعاء الحقول () مرتين.

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

يمكنك استدعاء معظم الطرق عدة مرات (حقول متعددة ، شروط متعددة ، أوامر فرز متعددة ، وصلات متعددة ، ...).

لاحظ أنه ، كما هو موضح في المثال الخاص بي ، يجب أن تكون مكالمة الانضمام () منفصلة ولا يمكن "ربطها" (هذا هو المصطلح الفني لوجود عدة استدعاءات طرق متتالية) لأنها لا تُرجع كائن الاستعلام ولكن اسم الجدول المستعار.

28
Berdir

ستظل الصلة الضمنية تعمل مع db_query () ، إذا كنت لا تفعل أي شيء يتوهم. لست متأكدًا مما إذا كانت هذه ممارسة سيئة أم لا. سألت مرة واحدة في IRC ولم أحصل على رد من أي شخص. لذلك إذا كان لديك أي من المتبقيين من D6 ، فسيظلون يعملون.

2
colan