db_update () dengan bergabung


9

Apakah ada cara db_update()untuk melakukan kueri berikut?

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'

Saya mencoba menggunakan db_update()->join();tetapi tidak berhasil.

Jawaban:


12

db_update()tidak mengimplementasikan antarmuka apa pun yang memiliki join()/ innerJoin()/ etc. metode jadi saya pikir Anda terjebak dengan menggunakan db_query()dan menulis string kueri secara manual.

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

itu adalah solusi tetapi dalam dokumentasi drupal mereka mengatakan "Jangan gunakan fungsi ini untuk kueri INSERT, UPDATE, atau DELETE. Itu harus ditangani melalui db_insert (), db_update (), db_update () dan db_delete () masing-masing." jadi saya pikir mungkin untuk mengimplementasikan subquery akan lebih sedikit kinerja tetapi lebih tepat. Bagaimana menurut anda ?
ivan

2
Saya akan mengambil dokumentasi itu dengan sejumput garam ... jika DBTNG tidak dapat melakukan kueri yang Anda butuhkan dengan kelas yang ada, sangat dapat diterima untuk digunakan db_query(). Jika Anda ingin tetap berpegang teguh pada dokumentasi maka yakin, kondisi dengan subquery akan menjadi pilihan. Tetapi seperti yang Anda katakan, itu akan menjadi kurang berkinerja dan bagi saya tidak jatuh 'lebih baik' daripada menggunakan query sql langsung
Clive

Hanya mencatat ini tampaknya juga terjadi di Drupal 8, Updatetidak menerapkan joinfungsi apa pun , masih perlu menggunakan permintaan umum untuk kasus ini.
David Thomas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.