db_update () con join


9

Esiste un modo db_update()per la seguente query?

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'

Ho provato a usare db_update()->join();ma non ha funzionato.

Risposte:


12

db_update()non implementa alcuna interfaccia che abbia join()/ innerJoin()/ etc. metodi quindi penso che tu sia bloccato con l'utilizzo db_query()e la scrittura manuale della stringa di 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);

è una soluzione alternativa ma nella documentazione di drupal dicono "Non utilizzare questa funzione per le query INSERT, UPDATE o DELETE. Queste dovrebbero essere gestite rispettivamente tramite db_insert (), db_update () e db_delete ()." quindi penso che forse implementare una sottoquery sarebbe meno prestazioni ma più correttamente. Cosa ne pensi ?
Ivan

2
Prenderei quella documentazione con un pizzico di sale ... se DBTNG non è in grado di eseguire la query di cui hai bisogno con una classe esistente, è perfettamente accettabile da usare db_query(). Se si desidera attenersi rigidamente alla documentazione, sicuramente, una condizione con una sottoquery sarebbe un'opzione. Ma come dici tu, sarebbe meno performante e per me non è affatto "meglio" che usare una query sql diretta
Clive

Solo notando che questo sembra essere il caso di Drupal 8, Updatenon implementa alcuna joinfunzione, è comunque necessario utilizzare la query generica per questo caso.
David Thomas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.