我有一个自定义模块,其中包含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中不可用。
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);
}发布于 2018-10-19 20:16:52
当您想应用数据库架构更改时,您不会重新安装该模块。您可以通过hook_update_N()从MYMODULE.install文件中应用这些更改。
参见更新Drupal 8中的数据库架构和/或数据 on drupal.org。
如果您的模块正在进行与您的模块用
hook_schema()定义的数据库模式相关的数据模型更改,那么您需要正确地更新您的数据模型。这两个步骤是:
hook_schema()代码,以便在数据库表和字段定义发生更改时反映新的数据模型。这将确保在您进行更改后安装模块的人员将安装正确的数据库表。有关这方面的详细信息,请参阅Schema文档。hook_update_N()函数。这将为您的模块的现有用户更新数据库,这些用户在您进行更改之前已经安装了数据库,以便他们能够继续工作。下文对此作了说明。还有一个关于如何从hook_update_N()添加一个新表的示例:
$spec =[‘=> 'My description',’=>‘字段’[ 'myfield1‘=>,'myfield2’=>,],‘主键’=>,];$schema =数据库::getConnection()->schema();$schema->createTable(‘mytable2 2’,$spec);
https://drupal.stackexchange.com/questions/271246
复制相似问题