bookimed/dbal-schema-provider-lib

此包最新版本(v1.0)没有可用的许可证信息。

DBAL模式提供者

v1.0 2022-02-19 13:41 UTC

This package is auto-updated.

Last update: 2023-09-19 14:56:33 UTC


README

需要配置 doctrine_migration 包,通过键 doctrine_migrations.services 使用自定义模式提供者。

# config/packages/doctrine_migrations.yaml
doctrine_migrations:
  # unnecessary... 

  services:
    Doctrine\Migrations\Provider\SchemaProvider: doctine.dbal.schema.migration_schema_provider

使用

自己的模式提供者

注册新提供者:1) 实现 GameInspire\DBAL\Schema\Provider\DBALSchemaProviderInterface 接口;2) 使用标签 db.schema.provider 将其添加到 DI 容器中。

生成迁移

  1. 运行 bin/console doctrine:migrations:diff 以获取自动生成的迁移和应用的差异更改(doctrine 将获取当前数据库状态并与指定的 PHP 代码中指定的进行比较)。

  2. 更新迁移以实现无锁迁移或实现其他目标,并提交。

示例

自定义提供者

<?php
namespace Bookimed\Entity\Storage;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Types\Types;
use Bookimed\DBAL\Schema\Provider\DBALSchemaProviderInterface;

final class EntityMysqlSchema implements DBALSchemaProviderInterface
{
    public const TABLE_NAME = 'entity';
 
    public const FIELD_1_FIELD = 'field_1';
    public const FIELD_2_FIELD = 'field_2';
    public const FIELD_3_FIELD = 'field_3';
    
    public function specifySchema(Schema $schema): void
    {
        $table = $schema->createTable(self::TABLE_NAME);
    
        $table->addColumn(self::FIELD_1_FIELD, Types::INTEGER);
        $table->addColumn(self::FIELD_2_FIELD, Types::INTEGER);
        $table->addColumn(self::FIELD_3_FIELD, Types::STRING);
        $table->setPrimaryKey([self::FIELD_1_FIELD]);
   }
}

依赖注入(DI)

services:
    service.entity.mysql.schema:
      class: Bookimed\Entity\Storage\EntityMysqlSchema
      tags: [ 'db.schema.provider' ]