首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新数据库架构而不丢失现有数据

问如何更新数据库架构而不丢失现有数据
EN

Drupal用户
提问于 2018-10-19 19:31:20
回答 1查看 2.5K关注 0票数 3

我有一个自定义模块,其中包含my_module.install文件,其中定义了mysql中的两个数据表。模块已经安装好了,我可以将数据从表单中保存到它们中。现在,我的需求发生了变化,我需要在同一个模块中创建第三个表。如何处理模块的重新安装。

1)准备MYSQl脚本,将现有数据备份到临时表中,卸载和重新安装模块后,将数据从临时表复制回表中。

2)查看与我使用的8.6.0的drupal核心版本不兼容的https://www.drupal.org/project/backup_迁移

( 3)还有其他模块或想法吗?

根据建议编辑:我在mymodule.install文件中创建了下面的函数,还编辑了mymodule_schema()方法并运行drush updatedb。但是,并没有像预期的表那样创建任何db更改。无法查看系统表以获得其他地方提到的最近版本号,因为该表在我当前的本地DB中不可用。

代码语言:javascript
复制
   function mymodule_update_8601(){
    $spec = array(
    'fields' => array(
     'application_setup_id' => array(
     'type' => 'serial',
     'not null' => TRUE,
     'description' => 'Primary Key: ID',
     ),
    ),
   );
   $schema = Database::getConnection()->schema();
   $schema->createTable('application_setup', $spec);
  }
EN

回答 1

Drupal用户

发布于 2018-10-19 20:16:52

当您想应用数据库架构更改时,您不会重新安装该模块。您可以通过hook_update_N()从MYMODULE.install文件中应用这些更改。

参见更新Drupal 8中的数据库架构和/或数据 on drupal.org。

如果您的模块正在进行与您的模块用hook_schema()定义的数据库模式相关的数据模型更改,那么您需要正确地更新您的数据模型。这两个步骤是:

  1. 更新hook_schema()代码,以便在数据库表和字段定义发生更改时反映新的数据模型。这将确保在您进行更改后安装模块的人员将安装正确的数据库表。有关这方面的详细信息,请参阅Schema文档。
  2. 编写一个hook_update_N()函数。这将为您的模块的现有用户更新数据库,这些用户在您进行更改之前已经安装了数据库,以便他们能够继续工作。下文对此作了说明。

还有一个关于如何从hook_update_N()添加一个新表的示例:

$spec =[‘=> 'My description',’=>‘字段’[ 'myfield1‘=>,'myfield2’=>,],‘主键’=>,];$schema =数据库::getConnection()->schema();$schema->createTable(‘mytable2 2’,$spec);

票数 5
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/271246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档