Como podemos excluir campos de várias tabelas usando db_delete()
e INNER JOIN
no Drupal 7?
Como podemos excluir campos de várias tabelas usando db_delete()
e INNER JOIN
no Drupal 7?
Respostas:
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);
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
db_delete
requer um único parâmetro, sem permitir um alias, é irritante. Caso contrário, seria possível usar JOINs semelhantes ao db_select.