Zugriff auf Hersteller-Attribute

Ich lege ein Hersteller-Attribute nach folgendem Schema an. $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>addAttribute( "s\_articles\_supplier\_attributes", "my", "newAttribute", "INT", false, 0 ); $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); Shopware()-\>Models()-\>generateAttributeModels( array('s\_articles\_supplier\_attributes') ); So wird zwar das Attribute in der Datenbank hinterlegt, jedoch ist es nicht möglich ĂŒber den ModelManager von Shopware darauf zurĂŒckzugreifen. Der folgende Code wird mir nur mit einem Ausnahmefehler quittiert, dass das Feld nicht gefunden werden konnte: $myNewAttribute = Shopware()-\>Models()-\>getRepository('Shopware\Models\Attribute\ArticleSupplier')-\>findOneBy(array('my\_newAttribute' =\> 'AttributeValue')); Ich habe zwar bereits in folgendem Post [HowTo] zusĂ€tzliche Artikel-Attribute in Frontend + Backend eine Alternative gefunden, indem einfach direkt ein Query ĂŒber Shopware()->Db()->fetchAll() druchgefĂŒhrt wird, jedoch widerstrebt mir dieses Vorgehen. DafĂŒr ist ja nun mal eigentlich das ORM und der ModelManager da. Hab ich denn bei der Anlage etwas falsch gemacht? Oder beim Zugriff mit dem Repository? WĂ€re toll, wenn jemand eine Idee dazu hĂ€tte.

Dein Attributname scheint mir falsch zu sein. Rein logisch mĂŒsste es ‘myNewAttribute’ sein, da Doctrine die Unterstriche in Camel-Case umwandelt. Du kannst aber ganz einfach in die ArticleSupplier.php im Verzeichnis ‘engine/Shopware/Model/Attribute’ gehen und dort nachschauen. Wenn alles richtig registriert wurde, wovon ich erstmal ausgehe wenn dein Feld in der Datenbank erscheint, sollte hier eine Funktion ‘getMyNewAttribute()’ erzeugt worden sein. Bei mir wird kein Fehler geworfen, wenn ich den Befehl ausfĂŒhre. Allerdings scheint er mir auch keinen Wert zurĂŒckzuliefern, weswegen evtl. noch etwas anderes falsch ist. Kleiner Tipp: Die Zeilen $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl(); $metaDataCache-\>deleteAll(); werden (ab v4.0.4, glaube ich) nicht mehr benötigt, da Shopware()->Models()->generateAttributeModels(
) (bzw. die hiervon aufgerufene Methode ‘regenerateAttributeProxies’) das an der passenden Stelle selber macht.

1 Like

TatsĂ€chlich hing es mit dem Unterstrich zusammen. Ich hatte ja bereits innerhalb des Models mit getMyNewAttribute gearbeitet. Ich dachte halt findOneBy erwartet in den Kriterien die Tabellenspalte und nicht den gemappten Objekt-Eigenschaftsnamen. Vielen dank fĂŒr die Hilfe!