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);

มันเป็นวิธีแก้ปัญหา แต่ในเอกสาร drupal พวกเขาพูดว่า "อย่าใช้ฟังก์ชั่นนี้สำหรับแบบสอบถาม INSERT, UPDATE หรือ DELETE ผู้ที่ควรได้รับการจัดการผ่าน db_insert (), db_update () และ db_delete () ตามลำดับ" ดังนั้นฉันคิดว่าอาจจะใช้แบบสอบถามย่อยจะมีประสิทธิภาพน้อยลง แต่ถูกต้องมากขึ้น คุณคิดอย่างไร ?
ivan

2
ฉันใช้เวลาเอกสารว่ามีการเหน็บแนมของเกลือ ... ถ้า DBTNG ไม่สามารถดำเนินการค้นหาที่คุณต้องการด้วย class db_query()ที่มีอยู่ก็เป็นที่ยอมรับอย่างสมบูรณ์กับการใช้งาน หากคุณต้องการติดเอกสารอย่างเข้มงวดจากนั้นตรวจสอบว่ามีเงื่อนไขกับแบบสอบถามย่อยจะเป็นตัวเลือก แต่อย่างที่คุณบอกว่ามันจะมีประสิทธิภาพน้อยกว่าและสำหรับฉันแล้วก็ไม่ได้ลดลง 'ดีกว่า' มากกว่าการใช้คำสั่ง SQL แบบตรง
Clive

แค่สังเกตว่านี่เป็นกรณีใน Drupal 8 Updateไม่ได้ใช้joinฟังก์ชั่นใด ๆแต่ยังต้องใช้การสืบค้นทั่วไปสำหรับกรณีนี้
David Thomas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.