Supprimer de plusieurs tables à l'aide de db_delete ()

9

Comment pouvons-nous supprimer des champs de plusieurs tables en utilisant db_delete()et INNER JOINdans Drupal 7?

Shruti
la source

Réponses:

11

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);
Clive
la source
Cela db_deleteprend un seul paramètre, sans autoriser d'alias, c'est ennuyeux. Sinon, il serait possible d'utiliser des JOIN similaires à db_select.
Agi Hammerthief
0

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

johirpro
la source