¿Cómo podemos eliminar campos de varias tablas usando db_delete()
y INNER JOIN
en Drupal 7?
¿Cómo podemos eliminar campos de varias tablas usando db_delete()
y INNER JOIN
en Drupal 7?
Respuestas:
No puedes, tengo miedo.
db_delete()
toma un solo parámetro de cadena para definir en qué tabla se ejecutará la consulta. No hay margen para proporcionar más de una tabla a la vez.
Sin embargo, puede ejecutar cualquier instrucción SQL que desee con db_query()
, por ejemplo.
// 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 toma un solo parámetro. Debe llamar db_delete()
varias veces para eliminar datos de varias tablas. Por favor vea el siguiente código de muestra:
/**
* 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();
}
Enlace de origen:
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
toma un solo parámetro, sin permitir un alias, es molesto. De lo contrario, sería posible usar JOINs similares a db_select.