gatherdigital/pimcore-migrations

此软件包已被废弃且不再维护。未建议替代包。

Pimcore数据库迁移插件

0.3.3 2017-06-29 18:33 UTC

This package is auto-updated.

Last update: 2021-12-27 15:32:18 UTC


README

#Pimcore Migrations Plugin

简介

Pimcore已经为开发者做了很多迁移工作,所有类定义更改和数据库架构更改都可以轻松地在开发、预发布和生产环境之间迁移。然而,以下数据库更改用例在Pimcore环境之间不容易迁移:

  • 自定义持久化模型架构。
  • 新类定义的添加不会自动在部署中发生。
  • 对网站设置(存储在数据库中)的更改不会在任何部署辅助工具中发生。
  • 对文档可编辑内容的更改,例如将文本区域更改为wysiwyg会创建对可编辑内容的无效引用。
  • 对ClassDefinition字段的重命名会删除旧列,然后添加新列,而不是真正地重命名。

此插件提供的内容

此插件提供了一个简单的机制,用于在Pimcore环境之间实现版本控制的可控数据库更改,其轻量级约定类似于Phinx或Doctrine Migrations之类的软件包。

安装

使用composer安装

composer require gatherdigitaluk/pimcore-migrations

配置

配置尽量简单。

  1. 安装后,请确保在您的extensions.php文件中将扩展程序列表如下:
<?php
  return [
      "PimcoreMigrations" => TRUE
  ];
?>
  1. 迁移应放置在您的/website/var/plugins/PimcoreMigrations/migrations文件夹中。

  2. 在执行控制台应用程序时,当检测到迁移文件夹时,插件将自动在Pimcore环境中安装一个新表。

使用

扩展AbstractMigration类

  1. 每个迁移都应该扩展PimcoreMigrations\Model\AbstractMigration类。
  2. 可以按您的意愿命名,尽管名称的最后部分应该是一个由下划线(_)分隔的数字值。例如
    • some_table_changes_1000.php
    • new_custom_persistent_class_1001.php
    • anotherdifferentlynamedclass_1002.php
  3. 每个迁移类应具有与Pimcore相同的类似命名的类名,并遵循相同的模式,例如
    • SomeTableChanges1000
    • NewCustomPersistentClass1001
    • Anotherdifferentlynamedclass1002
  4. 如果我们创建了上述类,我们将有以下版本(由整数表示)
    • 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个命令可用,可以按以下方式运行

  1. 检查状态
php console.php deployment:migrations:status
  1. 迁移向上
php console.php deployment:migrations:up
or
php console.php deployment:migrations:up --fromVersion 1000 --toVersion 1001
  1. 迁移向下
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
    }


}