Magento 2中的Declarative Schema是一种用于定义数据库模式的XML格式。Declarative Schema允许开发人员在Magento 2模块中定义数据库模式,而无需编写任何SQL代码。它可以方便地管理数据库模式的版本控制和数据库迁移。Declarative Schema 旨在简化 Magento 的安装和升级过程。以前,开发人员不得不为每个新版本的 Magento 用 PHP 编写数据库脚本。各种脚本被要求用于:
-
安装和升级数据库模式
-
安装和升级数据
-
调用每次安装或升级 Magento 时需要的其他操作
客户将 Magento 升级到比所安装的版本早几个版本时,每个中间版本的升级脚本仍会执行。开发人员被要求充分了解每个安装和升级脚本所包含的内容。在创建扩展时,他们需要考虑到这种复杂性。
新的声明式模式方法允许开发人员声明数据库的最终期望状态,并让系统自动调整到该状态,而不执行多余的操作。开发人员不再被迫为每个新版本编写脚本。此外,这种方法允许在卸载模块时删除数据。
实施声明式模式不是 Magento 2.3 的要求。然而,升级脚本将被逐步淘汰,以支持声明式模式。
要准备一个模块的声明性模式,你必须
- 开发一个数据补丁和/或一个模式补丁
- 为你的模块配置声明性模式
- 将升级脚本转换为声明性模式(此步骤仅适用于使用升级脚本发布的模块)。
一旦一个模块被转换为声明性模式的方法,它就不能再恢复为升级脚本。
使用Declarative Schema,您可以定义以下内容:
- 数据库表,包括表的名称、列和索引。
- 升级和回滚操作,这些操作定义在模块的升级脚本中。
- 初始数据,这些数据可以在模块的安装脚本中定义。
Declarative Schema的XML语法非常直观和易于理解,例如:
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Db:etc/schema.xsd">
<table name="my_table" resource="default" engine="innodb" comment="My Table">
<column xsi:type="int" name="id" nullable="false" comment="ID"/>
<column xsi:type="varchar" name="name" nullable="false" length="255" comment="Name"/>
<constraint xsi:type="primary" referenceId="PRIMARY">
<column name="id"/>
</constraint>
</table>
</schema>
在这个例子中,我们定义了一个名为“my_table”的表,包括一个整数类型的“id”列和一个varchar类型的“name”列。我们还定义了一个主键约束,该约束引用了“id”列。
在Magento 2中,Declarative Schema是一种推荐的方法来管理数据库模式。它提供了一种简单、直观和可重用的方法来定义数据库模式,并可以轻松地进行版本控制和数据库迁移。