Удалить из нескольких таблиц с помощью db_delete ()

9

Как мы можем удалить поля из нескольких таблиц, используя db_delete()и INNER JOINв Drupal 7?

Шрути
источник

Ответы:

11

Ты не можешь, я боюсь.

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принимает один параметр, без разрешения псевдонима, раздражает. В противном случае можно было бы использовать JOIN, аналогичные db_select.
Agi Hammerthief
0

Да, 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

johirpro
источник