db_update () con combinaciones

9

¿Hay alguna forma de db_update()para la siguiente consulta?

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'

Intenté usarlo db_update()->join();pero no funcionó.

ivan
fuente

Respuestas:

12

db_update()no implementa ninguna interfaz que tenga join()/ innerJoin()/ etc. métodos, así que creo que está atascado con el uso db_query()y la escritura de la cadena de consulta manualmente.

$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);
Clive
fuente
es una solución, pero en la documentación de drupal dicen "No use esta función para consultas INSERT, UPDATE o DELETE. Deben manejarse a través de db_insert (), db_update () y db_delete () respectivamente". así que creo que quizás implementar una subconsulta sería menos rendimiento pero más correctamente. Qué piensas ?
ivan
2
Tomaría esa documentación con una pizca de sal ... si DBTNG no puede realizar la consulta que necesita con una clase existente, es perfectamente aceptable de usar db_query(). Si desea apegarse rígidamente a la documentación, entonces seguro, una condición con una subconsulta sería una opción. Pero como usted dice, sería menos eficiente y para mí no se siente "mejor" que usar una consulta SQL directa
Clive
Solo notar que este parece ser también el caso en Drupal 8, Updateno implementa ninguna joinfunción, todavía necesita usar la consulta genérica para este caso.
David Thomas el