Excluir de várias tabelas usando db_delete ()

9

Como podemos excluir campos de várias tabelas usando db_delete()e INNER JOINno Drupal 7?

Shruti
fonte

Respostas:

11

Você não pode, eu tenho medo.

db_delete()usa um único parâmetro de sequência para definir em qual tabela a consulta deve ser executada. Não há escopo para fornecer mais de uma tabela por vez.

Você pode executar qualquer instrução SQL que desejar, com db_query(), por exemplo.

// 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
fonte
Isso db_deleterequer um único parâmetro, sem permitir um alias, é irritante. Caso contrário, seria possível usar JOINs semelhantes ao db_select.
Agi Hammerthief 28/03
0

Sim, db_delete usa um único parâmetro. Você precisa ligar db_delete()várias vezes para excluir dados de várias tabelas. Por favor, veja o seguinte código de exemplo:

/**
 * 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 da 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

johirpro
fonte