Anpassung des Schema für Attribute

Bemerkung

Der Schemamanager ist ab Version 2.3 implementiert.

Die Datenbankeigenschaften für Attribute werden über den Schemamanager manipuliert - mehr dazu beim Schemamanager - und nicht über eine Anpassung des DCA. Geprüft und ausgeführt werden die Änderungen beim Ablauf der DB-Migration - diese kann über den Contao-Manager oder über die Konsole angestoßen werden.

Im folgenden Beispiel wird das Feld des Attributes Langtext vita im Model mm_employees von TEXT (65535) auf MEDIUMTEXT (16777215) geändert - siehe Doctrine und Github.

 1<?php
 2// src/SchemaManager/SchemaManager.php
 3namespace App\SchemaManager;
 4
 5use Doctrine\DBAL\Platforms\AbstractMySQLPlatform;
 6use MetaModels\Information\MetaModelCollectionInterface;
 7use MetaModels\Schema\Doctrine\DoctrineSchemaGeneratorInterface;
 8use MetaModels\Schema\Doctrine\DoctrineSchemaInformation;
 9
10#[DoctrineSchemaProvider(-20)]
11final class SchemaManager implements DoctrineSchemaGeneratorInterface
12{
13    public function generate(DoctrineSchemaInformation $schema, MetaModelCollectionInterface $collection): void
14    {
15        if (!$schema->getSchema()->hasTable('mm_employees')) {
16            return;
17        }
18
19        $table = $schema->getSchema()->getTable('mm_employees');
20
21        $table->getColumn('vita')->setLength(AbstractMySQLPlatform::LENGTH_LIMIT_MEDIUMTEXT);
22    }
23}

Sofern man nicht mit der Registrierung über das Attribut „DoctrineSchemaProvider“ arbeiten kann oder möchte, kann als Alternative die Registrierung per services.yml erfolgen.

1# config/services.yml
2services:
3  App\SchemaManager\SchemaManager:
4    tags:
5      - { name: 'metamodels.schema-generator.doctrine', priority: -20 }

Ob der eigene Schemamanager registriert und geladen wurde, kann man auf Konsole prüfen mit

php vendor/bin/contao-console debug:container

Mehr Informationen zum Thema „Registrierung von Services“.