brain-diminished / schema-version-control
1.0.5
2020-08-02 10:02 UTC
Requires
- doctrine/dbal: ^2.8
- symfony/yaml: ^4.1 | ^5
Requires (Dev)
- phpunit/phpunit: ^7
- satooshi/php-coveralls: ^1.0.1
- thecodingmachine/dbal-fluid-schema-builder: ^1.3.0
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文件的拉取更改导致的。