モジュールを有効にすると、hook_schemaで定義したテーブルがどのように作成されるのかわかりませんが、(無効にした後)モジュールをアンインストールしても削除されません。
Drupal 7のドキュメントでは、これらのイベントが発生したときにテーブルが自動的に作成および削除されるようになっています。
_my_module.install
_内のコードの関連部分は次のとおりです。
_function my_module_schema(){
$schema = array();
$schema["my_module_table_xyz"] = array(
...
);
return $schema;
}
_
それがmodue名とテーブル名の違いに関連しているかどうか、または_hook_uninstall
_...にあるコードからの何かに関連しているかどうかはわかりません...
ノードタイプも定義していることを考慮すると、_hook_uninstall
_はそれを削除し(次のコードを参照)、以前に定義されたスキーマをsystem
が自動的にアンインストールするはずです。
_function my_module_uninstall(){
...
node_delete_multiple(...);
// delete custom fields
node_type_delete(...);
field_purge_batch(...);
}
_
についてどう思いますか?ありがとう
注: Drushを使用してモジュールを無効化、アンインストール、再インストールすると、_Table my_module_table_xyz already exist
_エラーが発生します。
pdate:クリーンで同じコードを検証したDrupalインストールが期待どおりに機能する(hook_schemaで定義されたテーブルが正常に削除された)。
「問題のある」Drupalインストールでは、_hook_uninstall
_の最後にdrupal_uninstall_schema("my_module_table_xyz")
を明示的に実行しようとしました(そして、その行の直後にログ命令を挿入しました、壊れることなく実行されることを確認するために)、しかし何も変更されません。テーブルはまだそこにあります!
どんなアイデア/仮説も本当にありがたいです。
私は同じ問題を抱えていて、最後に手動でhook_uninstall()
でそれを実行しましたが、他の手段は見つかりませんでした。
function mymodule_uninstall() {
$table_name = 'mytable';
if (db_table_exists($table_name)) {
db_drop_table($table_name);
}
}
これが他の誰かの時間を節約することを願っています。