birleştirilmiş db_update ()


9

db_update()Aşağıdaki sorgu için herhangi bir yolu var mı ?

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'

Kullanmayı denedim db_update()->join();ama işe yaramadı.

Yanıtlar:


12

db_update()join()/ innerJoin()/ etc olan herhangi bir arabirim uygulamaz . yöntemleri kullanarak db_query()ve elle sorgu dizesi yazma ile sıkışmış düşünüyorum .

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

geçici bir çözümdür ancak drupal dokümantasyonda "INSERT, UPDATE veya DELETE sorguları için bu işlevi kullanmayın. Bunlar sırasıyla db_insert (), db_update () ve db_delete () ile ele alınmalıdır. bu yüzden belki bir alt sorgu uygulamak daha az performans ama daha doğru olacağını düşünüyorum. Ne düşünüyorsun ?
ivan

2
Bu belgeleri bir tutam tuzla alırdım ... DBTNG mevcut bir sınıfla ihtiyacınız olan sorguyu gerçekleştiremezse, kullanımı mükemmel kabul edilebilir db_query(). Belgelere sıkı sıkıya bağlı kalmak istiyorsanız, alt sorgu içeren bir koşul bir seçenek olacaktır. Ama dediğin gibi, daha az performanslı olurdu ve benim için düz bir sql sorgusu kullanmaktan daha iyi bir 'daha iyi' düşmedi
Clive

Bunun Drupal 8'de de durumun göründüğünü, Updateherhangi bir joinişlevi uygulamadığını , yine de bu durum için genel sorguyu kullanması gerektiğini belirtmek.
David Thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.