db_delete()を使用して複数のテーブルから削除する


9

どのように我々は、使用して複数のテーブルからフィールドを削除することができますdb_delete()し、INNER JOINDrupalの7のか?

回答:


11

恐れることはできません。

db_delete()クエリを実行するテーブルを定義する単一の文字列パラメーターを受け取ります。一度に複数のテーブルを提供するスコープはありません。

ただしdb_query()、たとえばを使用して、好きなSQLステートメントを実行できます。

// 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_selectと同様のJOINを使用できます。
Agi Hammerthief 2014年

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.