keepUserData bei Reinstall

Mhh, irgendwie funktioniert bei mir keepUserData nicht wenn ich per Backend “Neu Installieren” mach. Er löscht alle Daten die in meinen Custom-Models sind.

    public function uninstall(UninstallContext $context) {
        /* @var EntityManager $em */
        $em = $this->container->get('models');
        $tool = new SchemaTool($em);
        $classMeta = $this->_getDoctrineSchema();
        try {
            if ($context->keepUserData() == false)
                $tool->dropSchema($classMeta);
        } catch (\Exception $ex) {

        }
    }

Hab ich eventuell ne Einstellung irgendwo vergessen? Bei “Neu Installieren” fragt er auch garnicht ob ich die Nutzerdaten behalten will.

Ok, mein Fehler. Hatte in der Install nen dropSchema drin. Wenn ich das dropSchema aber rausnehme kann ich das Plugin nicht neuinstallieren weil sich das SchemaTool beschwert dass es die Tabelle (zu Recht) schon gibt. Jemand nen Beispiel mit Custom Models, reinstall und keepUserData?

Ok, so scheint es zu gehen (unter Vorbehalt)

    public function install(InstallContext $context) {
        /* @var EntityManager $em */
        $em = $this->container->get('models');
        $tool = new SchemaTool($em);
        $classMeta = $this->_getDoctrineSchema();
        
        
        /** @var MySqlSchemaManager $schemaManager */
        $schemaManager = Shopware()->Container()->get('models')->getConnection()->getSchemaManager();
        foreach($classMeta as $class) {
            if (!$schemaManager->tablesExist($class->getTableName())) {
                $tool->createSchema([$class]);
            }else{
                $tool->updateSchema([$class], true);
            }
        }
    }

 

Hallo @langnickel‍,

Sie können einfach vergessen createSchema und benutzen nur updateSchema es werde create die Table wenn sie ist nicht da und update sie ob gibt etwas zu update.

also :

public function install(InstallContext $context) {
        /* @var EntityManager $em */
        $em = $this->container->get('models');
        $tool = new SchemaTool($em);
        $classMeta = $this->_getDoctrineSchema();
        
        
        /** @var MySqlSchemaManager $schemaManager */
        $schemaManager = Shopware()->Container()->get('models')->getConnection()->getSchemaManager();
        foreach($classMeta as $class) {
            $tool->updateSchema([$class], true);
        }
    }

VG,

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

1 „Gefällt mir“

Bitte darauf achten, dass ihr bei der Methode “updateSchema” den zweiten Parameter auf “true” setzt!

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“