db_update () যোগদান করে


9

db_update()নিম্নলিখিত প্রশ্নের জন্য কোন উপায় আছে ?

UPDATE field_data_field_TEST as ft 
left join node as n on ft.entity_id = n.nid
set n.type='test'
where n.type='foo'

আমি চেষ্টা করার চেষ্টা করেছি db_update()->join();কিন্তু এটি কার্যকর হয়নি।

উত্তর:


12

db_update()join()/ innerJoin()/ ইত্যাদি আছে এমন কোনও ইন্টারফেস প্রয়োগ করে না । পদ্ধতিগুলি যাতে আমি মনে করি আপনি db_query()নিজেই ক্যোয়ারী স্ট্রিংটি ব্যবহার এবং লেখার সাথে আটকে আছেন ।

$sql = "
  UPDATE field_data_field_TEST as ft 
  left join node as n on ft.entity_id = n.nid
  set n.type = :type1
  where n.type = :type2";

$args = array(':type1' => 'test', ':type2' => 'foo');
db_query($sql, $args);

এটি কার্যকর নয় তবে ড্রুপাল ডকুমেন্টেশনে তারা বলেছে "এই ফাংশনটি INSERT, আপডেট বা ডিলিট অনুসন্ধানগুলির জন্য ব্যবহার করবেন না Those এগুলি যথাক্রমে db_insert (), db_update () এবং db_delete () এর মাধ্যমে পরিচালনা করা উচিত।" সুতরাং আমি মনে করি একটি subquery বাস্তবায়ন কম পারফরম্যান্স কিন্তু আরও সঠিকভাবে হতে পারে। আপনি কি মনে করেন ?
আইভান

2
আমি এই ডকুমেন্টেশনটি এক চিমটি লবণের সাথে নেব ... যদি ডিবিটিএনজি আপনার বিদ্যমান ক্লাসের সাথে প্রয়োজনীয় ক্যোয়ারীটি সম্পাদন করতে না পারে তবে এটি ব্যবহারের জন্য একেবারে গ্রহণযোগ্য db_query()। আপনি যদি ডকুমেন্টেশনের সাথে দৃ rig়ভাবে আটকে থাকতে চান তবে নিশ্চিত হন, সাবকিউরির সাথে একটি শর্ত একটি বিকল্প হবে। তবে আপনি যেমনটি বলেছেন, এটি কম পারফরম্যান্ট হবে এবং আমার কাছে সোজা স্ক্যাল ক্যোয়ারী ব্যবহার করার চেয়ে 'ভাল' পড়ে না
ক্লাইভ

এটি কেবল দ্রুপাল 8-র ক্ষেত্রে দেখা যাচ্ছে, Updateকোনও joinফাংশন বাস্তবায়ন করে না , এখনও এই ক্ষেত্রে জেনেরিক জিজ্ঞাসা ব্যবহার করা দরকার।
ডেভিড থমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.