Come possiamo eliminare campi da più tabelle usando db_delete()
e INNER JOIN
in Drupal 7?
Come possiamo eliminare campi da più tabelle usando db_delete()
e INNER JOIN
in Drupal 7?
Risposte:
Non puoi aver paura.
db_delete()
accetta un singolo parametro stringa per definire su quale tabella deve essere eseguita la query. Non c'è spazio per fornire più di una tabella alla volta.
Puoi eseguire qualsiasi istruzione SQL che ti piace, tuttavia, ad db_query()
es.
// Deletes all nodes and related author users...please don't actually run this!!
$sql = 'DELETE u, n FROM {node} n INNER JOIN {users} u ON u.uid = n.uid';
db_query($sql);
Sì, db_delete accetta un singolo parametro. È necessario chiamare db_delete()
più volte per eliminare i dati da più tabelle. Si prega di consultare il seguente codice di esempio:
/**
* Implements hook_menu_delete().
*/
function block_menu_delete($menu) {
db_delete('block')
->condition('module', 'menu')
->condition('delta', $menu['menu_name'])
->execute();
db_delete('block_role')
->condition('module', 'menu')
->condition('delta', $menu['menu_name'])
->execute();
}
Link alla fonte:
https://github.com/drupal/drupal/blob/7.x/modules/block/block.module
https://api.drupal.org/api/drupal/modules%21block%21block.module/ 7.x
db_delete
richiede un singolo parametro, senza consentire un alias, è fastidioso. Altrimenti, sarebbe possibile usare JOINs simili a db_select.