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();但是没有用。

Answers:


12

db_update()没有实现带有join()/ innerJoin()/ etc的任何接口。方法,所以我认为您在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 2012年

2
我会花些时间来阅读该文档...如果DBTNG无法执行现有类的查询,那么使用完全可以接受db_query()。如果您想严格遵守文档,那么可以选择带有子查询的条件。但是正如您所说,这将比使用直接的SQL查询性能更低,对我而言,没有比使用直接的SQL查询更好的了
Clive

只是要注意,在Drupal 8中似乎也是如此,Update它没有实现任何join功能,在这种情况下仍需要使用通用查询。
大卫·托马斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.