什么时候schema_version和数据版本会不同?


8

例如,我的模块中没有安装脚本,我可以忽略文件中的setup_version标记吗module.xml

在m1自动安装的模块中,现在首先抛出一个错误(如果我们不运行setup upgrade命令)。为什么我需要手动运行安装程序升级?

什么是场景schema_versiondata_version会有所不同? 我观察到setup_module表中几乎所有记录都包含相同的值。


1
删除了自动升级,以提高性能和稳定性。检查和比较每个请求上所有模块的版本,这在生产中无用的开销。升级数据库是应该在开发人员的完全控制之下的一种操作,而不是在应用程序本身的完全控制下。
V Korotun

在M2中,可以通过实现两个相应的接口来进行两种数据库修改:“ \ Magento \ Framework \ Setup \ UpgradeDataInterface”和“ \ Magento \ Framework \ Setup \ UpgradeSchemaInterface”。因此,您可以在不更改数据库架构的情况下升级数据库数据。这就是为什么这些版本过着自己的生活。
V Korotun

Answers:


12

data_version 是通过数据脚本添加的数据版本。

这些脚本是在Setup/InstallData.php和下方的模块文件夹下开发的Setup/UpgradeData.php

schema_version 是通过安装脚本添加的数据库架构的版本。

这些脚本是在Setup/InstallSchema.php和下的模块文件夹下开发的。Setup/UpgradeSchema.php

因此,当data_version和不schema_version同时的场景如下:

  • 您有一个同时具有设置和数据脚本的模块
  • 通常,您应该运行,php bin/magento setup:upgrade以便架构脚本和数据脚本都可以运行
  • 而不是这样做,您首先运行php bin/magento setup:db-schema:upgrade在这一点上,schema_version将不同于data_version
  • 运行php bin/magento setup:db-data:upgrade将升级数据并使两个版本相同

1
但是,为什么有人会单独运行这些命令而不是setup:upgrade
MagePsycho

1
@MagePsycho好吧,这不是正常行为。但是,由于两个命令都可用,因此可以正确执行。
拉斐尔(Raphael)在数字钢琴演奏会上,2016年

@MagePsycho没有理由,我认为这完全是多余的。
Bunyamin Inan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.