bookimed / dbal-schema-provider-lib
DBAL schema provider
This package's canonical repository appears to be gone and the package has been frozen as a result. Email us for help if needed.
Installs: 114
Dependents: 0
Suggesters: 0
Security: 0
pkg:composer/bookimed/dbal-schema-provider-lib
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
Need to configure doctrine_migration bundle to use custom schema provider via key doctrine_migrations.services:
# config/packages/doctrine_migrations.yaml
doctrine_migrations:
# unnecessary...
services:
Doctrine\Migrations\Provider\SchemaProvider: doctine.dbal.schema.migration_schema_provider
Using
Own schema provider
For a register new provider:
1) implement interface GameInspire\DBAL\Schema\Provider\DBALSchemaProviderInterface;
2) add it to DI container with tag db.schema.provider.
Generate migration
Run
bin/console doctrine:migrations:diffto get auto-generated migration with applied diff changes (doctrine will fetch current DB state and compare with specified in PHP code).Update migration for lock-free migrate or for another goals and commit it.
Example
Custom provider
<?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' ]