Doctrine- bzw. Model-Events werden (teilweise) nicht gefeuert

Hallo zusammen!

Ich habe seit gestern verzeifelt versucht, mich mit einem Plugin an ein Model-Event für Bestellungen zu hängen. Ich bin dabei vorgegangen wie im Models Guide in der Dokumentation beschrieben:

        $this->subscribeEvent(
            'Shopware\Models\Order\Order::postUpdate',
            'onOrderPostUpdate'
        );
        $this->subscribeEvent(
            'Shopware\Models\Order\Order::postPersist',
            'onOrderPostUpdate'
        );

Nach Einigem Zweifeln an meinem Verstand habe ich im EventManager mal sämtliche Events protokollieren lassen und siehe da: diese Events werden bei Anlage einer Bestellung nie gefeuert. Ich vermute mal, die Daten werden “an Doctrine vorbei” in die Datenbank geschrieben (zumindest im Frontend). Es kann zumindest kein grundlegendes Problem sein - wenn ich im Backend z.B. einen Artikel anlege, werden die Events “Shopware\Models\Article\Article::prePersist” und “Shopware\Models\Article\Article::postPersist” korrekt gefeuert und protokolliert.

Mache ich etwas falsch und kann mich irgendwie doch an die Events hängen wenn eine Bestellung getätigt wird oder ist das ein Shopware Bug?

Viele Grüße,

Christian

Vergessen zu erwähnen: Es handelt sich um Shopwaer 5.2.27

Du hast das Problem korrekt erfasst: Bestellungen werden direkt per plain sq (und damit vorbei an doctrine) in die Datenbank geschrieben. Schau dir mal die sOrder Klasse an. Da wirst du ein paar events finden, an die du dich hängen kannst.

Viele Grüße

1 „Gefällt mir“

Generell wird Doctrine nur im Backend benutzt. Im Frontend kommt immer Plain SQL zum Einsatz. Daher hilft das Hooken der Models dort nicht.

1 „Gefällt mir“

Danke für die Hilfe!

Finde ich sehr schade - insbesondere, dass es in der Dokumentation nicht erwähnt wird. Aber dann weiß ich jetzt wenigstens, woran ich bin.

Hm, an irgendeiner Stelle wird erwähnt, dass es Shopware Best Practice ist, den Datenbankzugriff so zu handhaben. Und ansonsten hilft es immer im Quellcode von Shopware zu lesen. Wie so oft hgikt: Der Quellcode ist die beste Doku.

Du kannst du Doku auch gerne bearbeiten und um einen Passus an entsprechender Stelle erweitern. Die Pull Requests werden zum mindest bei der Doku immer mit Liebe angenommen!