bookimed / dbal-schema-provider-lib
此包最新版本(v1.0)没有可用的许可证信息。
DBAL模式提供者
v1.0
2022-02-19 13:41 UTC
Requires
- php: ^7.4 | ^8.0
- doctrine/doctrine-bundle: ^2.5
- doctrine/doctrine-migrations-bundle: ^3.2
Requires (Dev)
- bookimed/coding-standard: ^1.0
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 容器中。
生成迁移
运行
bin/console doctrine:migrations:diff
以获取自动生成的迁移和应用的差异更改(doctrine 将获取当前数据库状态并与指定的 PHP 代码中指定的进行比较)。更新迁移以实现无锁迁移或实现其他目标,并提交。
示例
自定义提供者
<?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' ]