Db_select () का उपयोग करके दो तालिकाओं से फ़ील्ड चुनें


15

मैं उपयोग कर 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'))

मैं कौन सा वाक्यविन्यास उपयोग करना चाहता हूं?

जवाबों:


28

आसान, केवल दो बार फ़ील्ड्स () को कॉल करें।

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

आप कई बार (कई क्षेत्रों, कई स्थितियों, कई प्रकार के आदेश, कई जुड़ाव, ...) के तरीकों को कॉल कर सकते हैं।

ध्यान दें कि, जैसा कि मेरे उदाहरण में दिखाया गया है, कॉल में शामिल होने के लिए () को अलग होने की आवश्यकता है और "जंजीर" नहीं हो सकती है (यह एक पंक्ति में कई विधि कॉल करने के लिए तकनीकी शब्द है) क्योंकि यह क्वेरी ऑब्जेक्ट को वापस नहीं करता है लेकिन तालिका उपनाम के लिए नाम।


2

यदि आप कुछ भी फैंसी नहीं कर रहे हैं, तो एक अंतर्निहित जुड़ाव अभी भी db_query () के साथ काम करेगा। मुझे यकीन नहीं है कि यह बुरा अभ्यास है या नहीं। मैंने आईआरसी में एक बार पूछा और किसी से प्रतिक्रिया नहीं मिली। इसलिए यदि आप D6 से बचे हुए लोगों में से किसी एक को प्राप्त कर चुके हैं, तो वे अभी भी काम करेंगे।


3
Db_query () का उपयोग करना पूरी तरह से ठीक है (यह प्रदर्शन कारणों से वास्तव में अनुशंसित है) जब तक कि db_select () का उपयोग करने का कोई स्पष्ट कारण नहीं है। मैंने उन कारणों को यहाँ रेखांकित किया है: drupal.stackexchange.com/questions/1200/…
Berdir

महान! मैं वैसे भी मुझे बदलने के लिए बहुत आलसी था। ;)
कोलन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.