Как мы можем удалить поля из нескольких таблиц, используя db_delete()
и INNER JOIN
в Drupal 7?
Как мы можем удалить поля из нескольких таблиц, используя db_delete()
и INNER JOIN
в Drupal 7?
Ответы:
Ты не можешь, я боюсь.
db_delete()
принимает один строковый параметр, чтобы определить, к какой таблице будет выполняться запрос. Нет возможности предоставлять более одной таблицы за раз.
Вы можете запустить любой SQL-оператор, например, с помощью db_query()
, например.
// 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);
Да, db_delete принимает один параметр. Вы должны позвонить db_delete()
несколько раз, чтобы удалить данные из нескольких таблиц. Пожалуйста, посмотрите следующий пример кода:
/**
* 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();
}
Ссылка на источник:
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
принимает один параметр, без разрешения псевдонима, раздражает. В противном случае можно было бы использовать JOIN, аналогичные db_select.