Usuń z wielu tabel za pomocą db_delete ()

9

Jak możemy usunąć pola z wielu tabel za pomocą db_delete()iw INNER JOINDrupal 7?

Shruti
źródło

Odpowiedzi:

11

Nie możesz się boję.

db_delete()pobiera parametr ciągu pojedynczego, aby zdefiniować, dla której tabeli ma być uruchomione zapytanie. Nie ma możliwości zapewnienia więcej niż jednego stołu na raz.

Możesz jednak uruchomić dowolną instrukcję SQL db_query(), np.

// 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
źródło
To db_deletewymaga jednego parametru, bez dopuszczenia aliasu, jest denerwujące. W przeciwnym razie byłoby możliwe użycie JOIN podobnych do db_select.
Agi Hammerthief
0

Tak, db_delete przyjmuje pojedynczy parametr. Musisz zadzwonić db_delete()wiele razy, aby usunąć dane z wielu tabel. Zobacz następujący przykładowy kod:

/**
 * 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 źródłowy:
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
źródło