Ergebnis 1 bis 5 von 5

Thema: Datenbankmigration Tabellen mit Präfix Ausnahme

  1. #1
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard Datenbankmigration Tabellen mit Präfix Ausnahme

    Hallo,

    Durch das Update von Contao 4.9 auf 4.13 werden bei mir nun im Contao Manager Tabellen angezeigt die nicht das tl_ Präfix haben und diese als zu löschen vorgeschlagen. Ich würde diese gerne irgendwie ausnehmen, damit diese nicht angezeigt werden. Gibt es hier eine Möglichkeit? Die Tabellen sind nicht teil von Contao, sollen aber mit in der Datenbank geführt werden.

  2. #2
    Contao-Nutzer Avatar von agonyz
    Registriert seit
    10.09.2020.
    Beiträge
    36

    Standard

    Zitat Zitat von cyklop Beitrag anzeigen
    Hallo,

    Durch das Update von Contao 4.9 auf 4.13 werden bei mir nun im Contao Manager Tabellen angezeigt die nicht das tl_ Präfix haben und diese als zu löschen vorgeschlagen. Ich würde diese gerne irgendwie ausnehmen, damit diese nicht angezeigt werden. Gibt es hier eine Möglichkeit? Die Tabellen sind nicht teil von Contao, sollen aber mit in der Datenbank geführt werden.
    Hmm ich glaube das Vorhaben ist nicht so einfach. Wenn ich das richtig im Kopf habe, dann werden da zwei Schemata erstellt und dann verglichen.
    Das erste Schema wird über ein Abbild der Datenbank bzw. der Tabellen darin erstellt.

    Danach wird dann das "Ziel"-Schema erstellt.
    Dabei wird das Schema erstmal aus den vorhandenen Entities erstellt, die sich in der Installation befinden.

    Über den contao.listener.doctrine_schema listener wird dann das soeben erstellte Schema dann noch um die DCA's erweitert.

    https://github.com/contao/core-bundl...maListener.php

    Nun müsste man in diesem Prozess quasi irgendwo eine Ausnahme einbringen, um die von dir genannten Tabellen zu ignorieren.
    Mir ist nur leider keine Möglichkeit bekannt, wie man das tun könnte.

    EDIT:

    Vielleicht hilft dir das hier weiter: https://github.com/contao/contao/pull/2049
    Geändert von agonyz (31.10.2022 um 17:14 Uhr)

  3. #3
    Contao-Nutzer Avatar von agonyz
    Registriert seit
    10.09.2020.
    Beiträge
    36

    Standard

    Vielleicht noch zur Vollständigkeit (Getestet in meinem Development-System).
    Ich weiß nicht, ob das der sauberste Weg ist (ich bezweifel es etwas), optional kann man auch die bisherigen Tabellen manuell hinzufügen.

    In meiner Dev-Umgebung habe ich es so gemacht:
    PHP-Code:
    <?php

    // src/EventListener/SchemaListener.php
    namespace Agonyz\ContaoTestBundle\EventListener;

    use 
    Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;

    class 
    SchemaListener
    {
        public function 
    __invoke(GenerateSchemaEventArgs $event)
        {
            
    $schema $event->getSchema();
            
    $entityManager $event->getEntityManager();

            foreach(
    $entityManager->getConnection()->createSchemaManager()->listTables() as $table) {
                if(
    str_starts_with($table->getName(), 'tl_')) {
                    continue;
                }
                
    $tableToKeep $schema->createTable($table->getName());
                foreach(
    $table->getColumns() as $column) {
                    
    $tableToKeep->addColumn($column->getName(), $column->getType()->getName());
                }
            }
        }
    }
    Und in der services.yml:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue

        agonyz
    .listener.doctrine_schema:
            class: 
    Agonyz\ContaoTestBundle\EventListener\SchemaListener
            arguments
    :
                - 
    '@contao.doctrine.dca_schema_provider'
            
    tags:
                - { 
    namedoctrine.event_listenereventpostGenerateSchema 
    Natürlich kann das alles unter /src/ abgelegt werden, um es nicht als eigenes Bundle zu konfigurieren.

  4. #4
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Hallo und danke für deine Antwort. Du musst mir leider noch einmal diesbezüglich helfen. Soweit ich das verstanden habe macht dein SchemaListener eine Anpassung das er nur Tabellen mit dem Präfix tl_ aufnimmt, oder?
    Dies muss dann als Plugin in Contao wie eingebunden werden? Reichen da die zwei Dateien? Also unter system/modules/Agonyz/ContaoTestBundle die jeweiligen Dateien?
    Bei mir funktioniert dies aktuell so leider nicht. Bin mir aber nicht sicher ob ich es richtig eingebunden habe

  5. #5
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Zitat Zitat von agonyz Beitrag anzeigen
    Vielleicht noch zur Vollständigkeit (Getestet in meinem Development-System).
    Ich weiß nicht, ob das der sauberste Weg ist (ich bezweifel es etwas), optional kann man auch die bisherigen Tabellen manuell hinzufügen.

    In meiner Dev-Umgebung habe ich es so gemacht:
    PHP-Code:
    <?php

    // src/EventListener/SchemaListener.php
    namespace Agonyz\ContaoTestBundle\EventListener;

    use 
    Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;

    class 
    SchemaListener
    {
        public function 
    __invoke(GenerateSchemaEventArgs $event)
        {
            
    $schema $event->getSchema();
            
    $entityManager $event->getEntityManager();

            foreach(
    $entityManager->getConnection()->createSchemaManager()->listTables() as $table) {
                if(
    str_starts_with($table->getName(), 'tl_')) {
                    continue;
                }
                
    $tableToKeep $schema->createTable($table->getName());
                foreach(
    $table->getColumns() as $column) {
                    
    $tableToKeep->addColumn($column->getName(), $column->getType()->getName());
                }
            }
        }
    }
    Und in der services.yml:
    PHP-Code:
    services:
        
    _defaults:
            
    autoconfiguretrue

        agonyz
    .listener.doctrine_schema:
            class: 
    Agonyz\ContaoTestBundle\EventListener\SchemaListener
            arguments
    :
                - 
    '@contao.doctrine.dca_schema_provider'
            
    tags:
                - { 
    namedoctrine.event_listenereventpostGenerateSchema 
    Natürlich kann das alles unter /src/ abgelegt werden, um es nicht als eigenes Bundle zu konfigurieren.
    Ich habe das nun bei mir zum laufen gebracht. Bekomme aber immer noch im Contao Manager die anderen Tabellen weiterhin angezeigt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •