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“.