netbrothers-gmbh/version-bundle

基于 MariaDB/MySQL 和 Doctrine 触发的版本表

安装量: 2,027

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 5

分支: 3

开放问题: 0

类型:symfony-bundle

v3.0.0 2024-05-29 13:34 UTC

This package is auto-updated.

Last update: 2024-08-31 00:33:24 UTC


README

build status

NetBrothers 版本包

这个混合包可以作为 Symfony 包 或作为独立 PHP 包,用于在 MariaDBMySQL 数据库中管理版本化表。它使用 Doctrine ORM 与您的数据库进行交互。

注意:此包旨在与 MariaDB/MySQL 一起使用。它**不**考虑与其他 RDBMS 一起使用。

本质上,此包提供了一项命令,该命令执行两项操作。

  1. 创建版本表
    对于具有名为 version 的列、类型为 INT/BIGINT 的表(例如 orig_table),脚本将创建相应的版本表(例如 orig_table_version),以便原始表和版本表在结构上相同。

  2. 创建版本触发器
    对于每个版本化的原始表,脚本将创建一个触发器,该触发器将在 INSERTUPDATE 操作中增加版本列中的版本号,并将行的副本保存到版本表中。

安装

在命令提示符下,切换到您项目的根目录并执行

composer require netbrothers-gmbh/version-bundle

有三种安装方式

独立包

无需进一步安装步骤。

带有 Flex 的 Symfony 包

无需进一步安装步骤。Symfony Flex 会自动将包注册到 config/bundles.php

不带 Flex 的 Symfony 包

您需要通过将包添加到项目中的注册包列表来启用它,在文件的 config/bundles.php 中。

// config/bundles.php
return [
    // ...
    NetBrothers\VersionBundle\NetBrothersVersionBundle::class => ['all' => true],
    // ...
];

配置

Symfony 包

将包的 netbrothers_version.yaml 文件从包的 install 文件夹复制到您的 Symfony 项目的配置路径。

Doctrine 迁移

如果您使用 Doctrine Migrations,请通过使用/自定义 模式过滤器 选项来指示它忽略您的版本表。如果您没有其他模式过滤器,您可以使用这个:schema_filter: ~(?<!_version)$~。请参见示例文件了解如何操作。

注意:如果您不过滤您的版本表,Doctrine 可能会在下一个机会中删除它们。

包配置

您可以在创建版本时指定某些列(按名称)始终由比较算法忽略。请参见示例文件 netbrothers_version.yaml 了解如何操作。

独立

在大多数PHP框架中,您将有一个用于管理依赖项的PSR-11兼容容器。您需要通过文件参数将此容器提供给脚本。

vendor/bin/netbrothers-version --container-file=config/container.php --summary

脚本将检查提供的容器是否实现了PSR-11 ContainerInterface。如果是,它将假设通过标识符EntityManagerInterface::class使用Doctrine EntityManagerInterface的实例。以下是一个检查容器文件是否正常工作的示例。

<?php

require_once '/path/to/vendor/autoload.php';

use Psr\Container\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;

$container = require '/path/to/your/container-file.php';

if (
    $container instanceof ContainerInterface
    && $container->get(EntityManagerInterface::class) instanceof EntityManagerInterface
) {
    // everything is fine
} else {
    // you need to check your container file
}

在独立模式下,忽略表和列由命令行选项控制。

vendor/bin/netbrothers-version \
    --container-file=config/container.php \
    --ignore-table=unversioned_table_one \
    --ignore-table=unversioned_table_two \
    --exclude-column=unversioned_column_one \
    --exclude-column=unversioned_column_two \
    --create-trigger

用法

准备您的实体/原始表

为要版本化的每个表添加一个名为version(类型INT/BIGINT)的列。这可以通过将VersionColumn特质添加到您的实体中,然后创建并应用迁移来完成。

创建版本表和触发器

执行以下命令。

# Symfony
bin/console netbrothers:version 

# Standalone
vendor/bin/netbrothers-version --container-file=config/container.php

对于每个具有version-列的表,该命令将

  • 创建相应的版本表(如果尚不存在),
  • 比较两个表中的列,并修改版本表以匹配原始表,
  • (如果存在)删除旧版本触发器,
  • (在任何情况下)创建版本触发器。

为单个表创建版本表和触发器

如果需要,您可以将版本化应用于单个表。这可以通过将表名作为控制台命令的参数提供来完成。

# Symfony
bin/console netbrothers:version [<tableName>]

# Standalone
vendor/bin/netbrothers-version --container-file=config/container.php [<tableName>]

命令行选项

版本命令提供以下选项(子命令)。

许可证

MIT

作者

nb.logo