Drupal 8.6 Commerce:在没有 module_uninstall() 的 .install 文件中从数据库中删除表。为啥?
Posted
技术标签:
【中文标题】Drupal 8.6 Commerce:在没有 module_uninstall() 的 .install 文件中从数据库中删除表。为啥?【英文标题】:Drupal 8.6 Commerce: in .install file without module_uninstall() remove tables from database. Why?Drupal 8.6 Commerce:在没有 module_uninstall() 的 .install 文件中从数据库中删除表。为什么? 【发布时间】:2019-06-30 10:07:12 【问题描述】:卸载模块时,为什么要从数据库中删除所有表,而 .install 文件中没有 module_uninstall()
函数。
另外,为什么要创建没有module_install()
函数的表
.install 文件代码只有:
function commerce_quickpay_schema()
$schema['webc_crypto_meta'] = [
'description' => 'Custom Cryptography Meta',
'fields' => [...],
'primary key' => ['wcm_id'],
];
$schema['webc_crypto_payment'] = [
'description' => 'Custom Cryptography Payment',
'fields' => [...],
'primary key' => ['wcp_id'],
];
return $schema;
另外,请在 .install 文件中创建表如果不存在条件。
【问题讨论】:
【参考方案1】:这就是它的行为方式,hook_schema 中定义的表将在安装或卸载模块时从数据库中创建或删除,当你想做一些额外的事情时应该使用 hook_install() 或 hook_uninstall() 钩子。
假设卸载模块时应该删除数据库架构,安装时返回,如果您考虑一下,这是完全有道理的。
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/function/hook_schema/8.7.x
"这个钩子声明的表会自动创建 该模块已安装,并在卸载该模块时删除。 这发生在 hook_install() 被调用之前,之后 hook_uninstall() 被分别调用。”
【讨论】:
以上是关于Drupal 8.6 Commerce:在没有 module_uninstall() 的 .install 文件中从数据库中删除表。为啥?的主要内容,如果未能解决你的问题,请参考以下文章