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 () এর সাথে কাজ করবে। আমি নিশ্চিত না এটি খারাপ অভ্যাস কিনা তা যদিও না। আমি একবার আইআরসি-তে জিজ্ঞাসা করেছি এবং কারও কাছ থেকে প্রতিক্রিয়া পাইনি। সুতরাং আপনি যদি ডি 6 থেকে বাদ পড়ে তাদের কেউ পেয়ে থাকেন তবে তারা এখনও কাজ করবে।


3
ডিবি_উইক () ব্যবহারের জন্য সুস্পষ্ট কারণ না থাকলে db_query () ব্যবহার করা পুরোপুরি ঠিক আছে (এটি আসলে কার্য সম্পাদনের কারণে প্রস্তাবিত)। আমি এই কারণগুলি এখানে রূপরেখা দিয়েছি: drupal.stackexchange.com/questions/1200/…
বারদির

গ্রেট! আমি যাই হোক না কেন আমার রূপান্তর করতে খুব অলস ছিল। ;)
কোলান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.