brain-diminished/schema-version-control

1.0.5 2020-08-02 10:02 UTC

This package is auto-updated.

Last update: 2024-09-17 18:48:31 UTC


README

本软件包提供了一套用于管理数据库模式的工具,尤其是在需要将模型共享到版本化项目中时非常有用。为了做到这一点,模型实际上将被跟踪为一个YAML文件。

服务

本项目的主要类是SchemaVersionControlService;该服务提供涉及Doctrine\DBAL\Schema\Schema对象的操作。SchemaVersionControlService构造函数需要两个参数:一个Connection对象,以便检查当前数据库模式(请注意,此连接应该允许创建/更新/删除表),以及您模式文件的路径(在初始化项目时,该路径可能尚不存在)。该类的主要方法有

  • applySchema():此方法加载您的模式文件(假设已版本化)中描述的模式,将其与数据库中的实际模式进行比较,并执行必要的SQL语句来解决差异。当您更新源代码时,应使用此方法,前提是您尚未在本地更改模型(如果已更改,请参阅解决冲突部分)。
  • dumpSchema():与applySchema()相反,此方法检查数据库中当前使用的模式,并使用它来更改模式文件的内容。当您在本地修改模型时,应使用此方法,前提是在开始修改之前您的模型是最新版本(否则,再次参阅解决冲突部分)。

此外,您还会发现一些其他方法,例如getMigrationSql(),用于计算执行以使数据库模式与模式文件同步的SQL语句,或getSchemaDiff(),用于计算表示实际数据库模式与模式文件中描述的模式之间差异的SchemaDiff对象。

解决冲突

建议在更新源代码之前更新和提交您的模式。因此,您只需解决YAML文件中的冲突(如果有),这通常不会太复杂。

如果在拉取源代码之前未提交,从YAML文件应用模式几乎肯定会删除您的修改,这可能是您不想要的。首先导出您的模式,检查YAML文件中的修改(最近拉取的更改已被撤销),并仅保留您实际所做的修改。然后,您可以安全地应用您新获得的模式版本。

命令

为了通过Symfony控制台使用,本软件包提供了以下三个命令

  • schema:dump(参见图SchemaVersionControlService::dump())。
  • schema:apply(参见图SchemaVersionControlService::apply()):请注意,选项--dry-run可能很有用,尤其是在您需要更新生产中运行的应用程序的架构时。
  • schema:status:显示相对于YAML模式文件对实际模式执行的所有更改。因此,两个模式之间的所有差异都视为本地更改,即使它们实际上是由YAML文件的拉取更改导致的。