gatherdigital / pimcore-migrations
此软件包已被废弃且不再维护。未建议替代包。
Pimcore数据库迁移插件
0.3.3
2017-06-29 18:33 UTC
Requires
- php: >=5.6.0
- pimcore/installer-plugin: ~1.3
README
#Pimcore Migrations Plugin
简介
Pimcore已经为开发者做了很多迁移工作,所有类定义更改和数据库架构更改都可以轻松地在开发、预发布和生产环境之间迁移。然而,以下数据库更改用例在Pimcore环境之间不容易迁移:
- 自定义持久化模型架构。
- 新类定义的添加不会自动在部署中发生。
- 对网站设置(存储在数据库中)的更改不会在任何部署辅助工具中发生。
- 对文档可编辑内容的更改,例如将文本区域更改为wysiwyg会创建对可编辑内容的无效引用。
- 对ClassDefinition字段的重命名会删除旧列,然后添加新列,而不是真正地重命名。
此插件提供的内容
此插件提供了一个简单的机制,用于在Pimcore环境之间实现版本控制的可控数据库更改,其轻量级约定类似于Phinx或Doctrine Migrations之类的软件包。
安装
使用composer安装
composer require gatherdigitaluk/pimcore-migrations
配置
配置尽量简单。
- 安装后,请确保在您的extensions.php文件中将扩展程序列表如下:
<?php return [ "PimcoreMigrations" => TRUE ]; ?>
-
迁移应放置在您的/website/var/plugins/PimcoreMigrations/migrations文件夹中。
-
在执行控制台应用程序时,当检测到迁移文件夹时,插件将自动在Pimcore环境中安装一个新表。
使用
扩展AbstractMigration类
- 每个迁移都应该扩展PimcoreMigrations\Model\AbstractMigration类。
- 可以按您的意愿命名,尽管名称的最后部分应该是一个由下划线(_)分隔的数字值。例如
- some_table_changes_1000.php
- new_custom_persistent_class_1001.php
- anotherdifferentlynamedclass_1002.php
- 每个迁移类应具有与Pimcore相同的类似命名的类名,并遵循相同的模式,例如
- SomeTableChanges1000
- NewCustomPersistentClass1001
- Anotherdifferentlynamedclass1002
- 如果我们创建了上述类,我们将有以下版本(由整数表示)
- 1000
- 1001
- 1002
实现所需类方法
每个迁移都应该包含up()和down()方法,UP是默认操作,DOWN是回滚更改。以下是一个示例
<?php class MyMigrationClass1000 extends \PimcoreMigrations\Model\AbstractMigration { public function up() { \Pimcore\Db::get()->query("CREATE table `test`"); } public function down() { \Pimcore\Db::get()->query("DROP table `test`"); } }
运行控制台应用程序
可以通过Pimcore\Cli提供的控制台应用程序运行迁移。作为插件运行确保所有迁移都在Pimcore环境中运行。有以下3个命令可用,可以按以下方式运行
- 检查状态
php console.php deployment:migrations:status
- 迁移向上
php console.php deployment:migrations:up
or
php console.php deployment:migrations:up --fromVersion 1000 --toVersion 1001
- 迁移向下
php console.php deployment:migrations:down
or
php console.php deployment:migrations:down --fromVersion 1000 --toVersion 1001
用例示例
我们最大的担忧之一是在开发团队在数据库中进行许多更改的同时,如何保持开发、测试和生产环境的一致性。Pimcore 迁移功能提供了一种方法,使我们能够保持类定义的一致性,同时提供一定程度的数据完整性检查/反馈。我们项目的典型起始迁移可能如下所示
/**
Class name follows yyyymmddXXX conventionhere, this version would always run first
**/
class Migration00000000001 extends \PimcoreMigrations\Model\AbstractMigration
{
public function init()
{
$this->setRebuildClassesAfter(true);
}
public function up()
{
// create classes
PimcoreMigrations\Tool::addClassDefinition('WebUser', 1);
PimcoreMigrations\Tool::addClassDefinition('Product', 2);
PimcoreMigrations\Tool::addClassDefinition('OnlineShopOrder', 5);
PimcoreMigrations\Tool::addClassDefinition('OnlineShopOrderItem', 6);
// example to show the id is optional
PimcoreMigrations\Tool::addClassDefinition('ClassThatCanHaveAnyId');
// add some folders
$parent = \Pimcore\Model\Object\Service::createFolderByPath('/users');
$parent = \Pimcore\Model\Object\Service::createFolderByPath('/products');
}
public function down()
{
// cannot run down on this one
}
}