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 文件中从数据库中删除表。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal Commerce动态行项目

Drupal Commerce Kickstart2 中的其他字段

Drupal Commerce 以模态显示结帐

如何使 Drupal Commerce 配置实体可修改

卸载drupal 8 commerce时出现意外错误

Drupal 7 Commerce Paypal WPP 配置