[GELÖST] Nach der Deinstallation eines Plugins - "Column not found"-Fehler in Artikelübersicht

Hallo liebe shopware - Gemeinde,

nach der Deinstallation eines Plugins kommt beim Aufruf der Artikelübersicht ein „Column not found“ - Fehler, welcher sich auf die Artikel-Attributfelder bezieht, die durch das Plugin neu hinzugekommen sind.

Das Plugin fügt über:

Shopware()->Models()->addAttribute(
     's_articles_attributes',
     'neues',
     'Attribut',
     'int(10)',
     true,
     null
);
			
$metaDataCache = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl();
$metaDataCache->deleteAll();

Shopware()->Models()->generateAttributeModels(
     array('s_articles_attributes')
);

ein neues Artikel-Attribut-Feld hinzu.

Beim Deinstallieren entfernt es dieses neues Feld auch wieder über:

$this->getEntityManager()->removeAttribute(
     's_articles_attributes',
     'neues',
     'Attribut'
);
			
$metaDataCache = $this->getEntityManager()->getConfiguration()->getMetadataCacheImpl();
$metaDataCache->deleteAll();
			$this->getEntityManager()->generateAttributeModels('s_articles_attributes');

Bei der Installation ist es auch wie gewünscht in der Datenbanktabelle „s_articles_attributes“ vorhanden, bei der Deinstallation ist es auch in der Datenbanktabelle „s_articles_attributes“ wieder entfernt. Somit dürfte das Plugin auch alles wieder „aufgeräumt“ haben, was es erstellt hat.

Nun kommt aber beim Aufruf der Artikelübersicht der oben genannte Fehler, das nach der Deinstallation (logischerweise) dieses Feld nicht mehr vorhanden ist. Es wurden auch sogenannte „Filter“ (links) gesetzt bzw. sind vorhanden.

Der Fehler scheint von einem der Filter zu kommen - kann man diese irgendwie „neu kompilieren“ bzw. wieso wissen diese nicht, dass das Feld nicht mehr vorhanden ist? Es wurde ja ordnungsgemäß wieder entfernt.

Ich hoffe, jemand hat eine Idee, woran es liegen könnte.

Beste Grüße

Sebastian

Hallo,

folgender Request schlägt bei Firebug fehl:

shopurl/backend/ArticleList/filter?_dc=1454929472641&resource=product&ast=%5B%7B%22type%22%3A%22nullaryOperators%22%2C%22token%22%3A%22ISMAIN%22%7D%5D&page=1&start=0&limit=25

Die Fehlermeldung ist:

Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. An exception occurred while executing 'SELECT t0.id AS id_1, t0.articleID AS articleID_2, t0.articledetailsID AS articledetailsID_3, t0.attr1 AS attr1_4, t0.attr2 AS attr2_5, t0.attr3 AS attr3_6, t0.attr4 AS attr4_7, t0.attr5 AS attr5_8, t0.attr6 AS attr6_9, t0.attr7 AS attr7_10, t0.attr8 AS attr8_11, t0.attr9 AS attr9_12, t0.attr10 AS attr10_13, t0.attr11 AS attr11_14, t0.attr12 AS attr12_15, t0.attr13 AS attr13_16, t0.attr14 AS attr14_17, t0.attr15 AS attr15_18, t0.attr16 AS attr16_19, t0.attr17 AS attr17_20, t0.attr18 AS attr18_21, t0.attr19 AS attr19_22, t0.attr20 AS attr20_23, t0.neues_Attribut AS neues_Attribut, t0.articleID AS articleID_37, t0.articledetailsID AS articledetailsID_38 FROM s_articles_attributes t0 WHERE t0.articledetailsID = ?' 

with params [730]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.neues_Attribut' in 'field list' in vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php on line 119

Er bemängelt sozusagen, dass das Attributsfeld nicht mehr vorhanden ist - das ist es ja auch nicht mehr, da das Plugin ja deinstalliert wurde und es wie oben beschrieben entfernt wurde.

Hat vielleicht jemand von Shopware eine Idee dazu? Gibt es da irgendeinen Cache oder LocalStorage-Eintrag, den man aktualisieren muss?

Theme kompilieren etc. hat nichts bewirkt.

Beste Grüße

Sebastian

Hallo,

das ist ein typischer Fehler, wenn die Installation/Deinstallation die Models nicht neu erzeugt. Ein sw:generate:attributes über die Konsole sollte da Abhilfe schaffen. Lässt sich natürlich auch direkt in der Deinstallation des Plugins machen. Ansonsten den Inhalt von /var/cache/production_…/doctrine/attributes manuell löschen.

Moritz

1 „Gefällt mir“

Hallo Moritz,

danke für die schnelle Antwort. Das manuelle Löschen von allen Dateien unter: /var/cache/production_…/doctrine/attributes hat leider nur folgenden Fehler gebracht:

Ups! Ein Fehler ist aufgetreten! Die nachfolgenden Hinweise sollten Ihnen weiterhelfen. Property Shopware\Models\Attribute\Article::$neuesAttribut does not exist in vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php on line 80 Stack trace: #0 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php(80): ReflectionProperty->__construct('Shopware\\Models...', 'neuesAttribut') #1 vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php(959): Doctrine\Common\Persistence\Mapping\RuntimeReflectionService->getAccessibleProperty('Shopware\\Models...', 'neuesAttribut') #2 vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(721): Doctrine\ORM\Mapping\ClassMetadataInfo->wakeupReflection(Object(Doctrine\Common\Persistence\Mapping\RuntimeReflectionService)) ...

Welche Models müssen denn alles neu generiert werden? Folgendes wurde ja beim Deinstallieren neu generiert:

$this->getEntityManager()->generateAttributeModels('s_articles_attributes');

Folgende Meldungen spuckt Firebug nun aus:

shopurl/backend/ArticleList/columnConfig?_dc=1454931696606&resource=product 302 Moved Temporarily

shopurl/backend/ArticleList/getGrammar?_dc=1454931696618&resource=product 302 Moved Temporarily

mit der Meldung:

Property Shopware\Models\Attribute\Article::$neuesAttribut does not exist in vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php on line 80

Beste Grüße

Sebastian

Hallo,

ist da vielleicht ein APC-Cache mit im Spiel?

Grüße

Moritz

Hallo Moritz,

nein.

Ich habe nun einmal den kompletten production-Ordner (/var/cache/production_…/) per FTP umgenannt, damit er einen neuen erstellt. Dies hat geholfen, nun funktioniert wieder alles.

Wie müsste ich dies nun aber für das Plugin lösen, damit das Plugin beim Deinstallieren alle Models neu generiert oder das bereinigt?

Beste Grüße

Sebastian

Sowas in die Richtung:

public function uninstall()
{
    // generates the new attributes model
    Shopware()->Models()->generateAttributeModels(array('s_articles_attributes'));


    return true;
}

 

1 „Gefällt mir“

Hallo steinsoftware,

genau dies ist ja wie oben im ersten Beitrag augelistet bereits in der Plugin-Deinstallation enthalten und kann definitiv nicht die von Moritz erwähnte Lösung sein.

$this->getEntityManager()->removeAttribute(
     's_articles_attributes',
     'neues',
     'Attribut'
);
			
$metaDataCache = $this->getEntityManager()->getConfiguration()->getMetadataCacheImpl();
$metaDataCache->deleteAll();
			$this->getEntityManager()->generateAttributeModels('s_articles_attributes');

Beste Grüße

Sebastian

Hallo,

soweit ich nun beobachten konnte, könnte es daran gelegen haben, dass bei der Deinstallation die Datenbanktabelle nicht in einem Array stand.

Somit dürfte sich das Problem nun gelöst haben - danke vorallem Moritz für die Hilfe.

Beste Grüße

Sebastian

Entschuldigung - mein Fehler.

Hatte das nur überflogen.