Hallo zusammen,
ich versuche auf die Attribute einer Bezahlmethode zuzugreifen die initial über den shopware_attribute.crud_service angelegt wurden.
Die Bezahlmethode rufe ich über das PaymentRepository ab:
/**
* @var $this->paymentMeansRepository \Shopware\Models\Payment\Repository
*/
$payment = $this->paymentMeansRepository->findOneBy(['id' => 7);
Versuche ich nun auf die Attribute zuzugreifen bekomme ich nur die id des Datensatzes ausgegeben sowie die dazugehörige paymentmeanID obwohl in der s_core_paymentmeans_attributes Tabelle mehrere Attributsspalten mit Werten vorhanden sind.
$payment->getAttribute();
Ein Zugriff auf die Werte mittels magischer Methoden (zb. $payment->getAttribute()->getMeinAttribut()) triggert eine Exception.
Das gleiche vorgehen mit Attributen hatte ich bereits beim DispatchRepository verwendet. Dort hat es ohne Probleme geklappt.
Hat einer einen Tipp wie die Attribute aus der jeweiligen Bezahlmethode über das ORM abgerufen werden können ohne direkt einen Query auszuführen ?
Vielen Dank
Miron
Unabhängig von deinem Problem könntest du auch den CRUD-Service nutzen um die Attribute zu laden:
$service = $this->container->get('shopware_attribute.data_loader');
$attributes = $service->load('s_user_attributes', $userID);
(zwar jetzt für den User, aber kann man ja entsprechend adaptieren).
Bei deinem eigentlichen Problem kann vielleicht jemand anderes helfen. Du könntest höchstens mal in /var/cache/prod_xxx/doctrine/attributes/payment.php schauen, ob das Attribut überhaupt im Model ist. Vielleicht müssen die Attributmodels noch neu generiert werden.
1 „Gefällt mir“
Hallo Moritz,
vielen Dank für deine Antwort.
Dein Ansatz mit dem DataLoader gibt mir alle benötigten Daten als Assoziatives Array aus. Für den Anfang reicht es
Du könntest höchstens mal in /var/cache/prod_xxx/doctrine/attributes/payment.php schauen, ob das Attribut überhaupt im Model ist.
Das habe ich bereits gemacht. Ähnlich wie beim Dispatch Attribut Model sind die Attribute die vom Plugin erstellt wurden nicht vorhanden. Die Magischen Getter funktionieren aber dennoch beim Dispatch Attribut…
Den Cache habe ich auch schon geleert, auch rabiat den Inhalt des Ordners var/cache/**/* geleert. Leider alles ohne Erfolg.
Ich arbeite erstmal mit dem data_loader weiter. Bei Zeiten schaue ich mir das Problem genauer an.