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ó.

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.