声明式模式概述Declarative Schema Overview

更新

Magento 2中的Declarative Schema是一种用于定义数据库模式的XML格式。Declarative Schema允许开发人员在Magento 2模块中定义数据库模式,而无需编写任何SQL代码。它可以方便地管理数据库模式的版本控制和数据库迁移。Declarative Schema 旨在简化 Magento 的安装和升级过程。以前,开发人员不得不为每个新版本的 Magento 用 PHP 编写数据库脚本。各种脚本被要求用于:

  • 安装和升级数据库模式

  • 安装和升级数据

  • 调用每次安装或升级 Magento 时需要的其他操作

客户将 Magento 升级到比所安装的版本早几个版本时,每个中间版本的升级脚本仍会执行。开发人员被要求充分了解每个安装和升级脚本所包含的内容。在创建扩展时,他们需要考虑到这种复杂性。

新的声明式模式方法允许开发人员声明数据库的最终期望状态,并让系统自动调整到该状态,而不执行多余的操作。开发人员不再被迫为每个新版本编写脚本。此外,这种方法允许在卸载模块时删除数据。

实施声明式模式不是 Magento 2.3 的要求。然而,升级脚本将被逐步淘汰,以支持声明式模式。

要准备一个模块的声明性模式,你必须

  • 开发一个数据补丁和/或一个模式补丁
  • 为你的模块配置声明性模式
  • 将升级脚本转换为声明性模式(此步骤仅适用于使用升级脚本发布的模块)。

一旦一个模块被转换为声明性模式的方法,它就不能再恢复为升级脚本。

使用Declarative Schema,您可以定义以下内容:

  1. 数据库表,包括表的名称、列和索引。
  2. 升级和回滚操作,这些操作定义在模块的升级脚本中。
  3. 初始数据,这些数据可以在模块的安装脚本中定义。

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是一种推荐的方法来管理数据库模式。它提供了一种简单、直观和可重用的方法来定义数据库模式,并可以轻松地进行版本控制和数据库迁移。