Hallo zusammen,
ich weiß garnicht wie ich hier anfangen soll…
Also ich habe ein Backend-Plugin für einen Kunden Entwickelt, dieses funktioniert einwandfrei.
Nun gab es neue Anforderungen und ich habe diese umgesetzt, bei mir funktioniert alles nach einem update weiterhin (wohlgemerkt sogar auf 2 verschiednen betriebssystemen mit zum teil unterschiedlichen Konfigurationen).
Das Update erweitert unter anderem das Custom Model um einige weitere Datenbankfelder.
Beim Kunden jedoch gibt es das Problem, dass sobald sie das Plugin update bei sich hochladen, das Update im Plugin-Manager durchführen und beim start des Plugins im Backend eine Fehlermeldung kommt. Diese Fehlermeldung kommt aus dem Grund weil die Datenbank beim Update nicht um die neuen felder aus dem Model erweitert wird.
Eine installation des Updates statt die ältere version zu updaten funktioniert jedoch fehlerfrei.
Folgende fälle gibt es:
-
Plugin installieren
-
Konfiguration ausfüllen
-
Plugin Update hochladen und update durchführen
-> Fehler, wenn man jedoch danach die current-version des Updates noch einmal hochsetzt und das update noch einmal durchführt wird alles richtig angelegt.
-
Plugin installieren
-
Konfiguration ausfüllen
-
Plugin Update hochladen und update durchführen
-> Fehler, geupdatetes Plugin neu installieren -> Kein Fehler, jedoch sind natürlich alle Daten aus der DB weg
-
Plugin installieren
-
Konfiguration ausfüllen
-
Gesamten cache löschen
-
Plugin Update hochladen und update durchführen
-> KEIN Fehler
Ich habe versucht diesen Fehler auf unterschiedlichen Shopware Versionen (4.3.7, 5.1.6, 5.2.x, 5.3.x, 5.4.x) und Unix Servern (Debian, Ubuntu) nachzustellen, jedoch kein Erfolg.
Die Server/PHP Konfigs werden beim Kunden in seinen Shopware Versionen auch alle Grün angezeigt unter Systeminfo…
Hat irgendwer eine idee was ich hier tun oder prüfen kann?
Update sieht wie folgt aus:
public function update($version)
{
$modelManager = Shopware()->Models();
$tool = new Doctrine\ORM\Tools\SchemaTool($modelManager);
$schemas = [
$modelManager->getClassMetadata(MeinModel::class),
];
/** @var MySqlSchemaManager $schemaManager */
$schemaManager = $modelManager->getConnection()->getSchemaManager();
foreach($schemas as $class) {
if (!$schemaManager->tablesExist($class->getTableName())) {
try {
$tool->createSchema([$class]);
} catch (\Exception $e) {
return array('success' => false, 'message' => $e->getMessage());
}
}else{
$modelManager->regenerateProxies();
$tool->updateSchema([$class], true);
}
}
switch ($version) {
case '1.0.6':
$this->customUpdateSettings();
default:
break;
}
return array(
'success' => true,
'invalidateCache' => array('config', 'backend', 'proxy', 'frontend', 'template', 'snippets')
);
}
In CustomUpdateSettings werden einfach nur ein paar Daten in die DB geschrieben.
Vielen Dank im Voraus!