Comment pouvons-nous supprimer des champs de plusieurs tables en utilisant db_delete()
et INNER JOIN
dans Drupal 7?
Comment pouvons-nous supprimer des champs de plusieurs tables en utilisant db_delete()
et INNER JOIN
dans Drupal 7?
Réponses:
Tu ne peux pas, j'ai peur.
db_delete()
prend un paramètre de chaîne unique pour définir sur quelle table la requête doit être exécutée. Il n'y a aucune possibilité de fournir plus d'une table à la fois.
Vous pouvez cependant exécuter n'importe quelle instruction SQL de votre choix, par db_query()
exemple.
// 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);
Oui, db_delete prend un seul paramètre. Vous devez appeler db_delete()
plusieurs fois pour supprimer des données de plusieurs tables. Veuillez consulter l'exemple de code suivant:
/**
* 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();
}
Lien source:
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
prend un seul paramètre, sans autoriser d'alias, c'est ennuyeux. Sinon, il serait possible d'utiliser des JOIN similaires à db_select.