Seit 5.6 Probleme mit der API

Moin,

ich bekomme beim Flushen in der Media Resource folgende Meldung:

exception":„[object] (Shopware\Components\Api\Exception\OrmException(code: 0): A new entity was found through the relationship ‚Shopware\Models\Media\Media#album‘ that was not configured to cascade persist operations for entity: Shopware\Models\Media\Album@000000005cc0335b0000000014da4dfd. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(…,cascade={"persist"}). If you cannot find out which entity causes the problem implement ‚Shopware\Models\Media\Album#__toString()‘ to get a clue. at /home/vagrant/www/alpha/vendor/shopware/shopware/engine/Shopware/Components/Api/Resource/Resource.php:239, Doctrine\ORM\ORMInvalidArgumentException(code: 0): A new entity was found through the relationship ‚Shopware\Models\Media\Media#album‘ that was not configured to cascade persist operations for entity: Shopware\Models\Media\Album@000000005cc0335b0000000014da4dfd. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(…,cascade={"persist"}). If you cannot find out which entity causes the problem implement ‚Shopware\Models\Media\Album#__toString()‘ to get a clue. at /home/vagrant/www/alpha/vendor/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php:102)“}

Die Media Resource hole ich mir per DI 

 $this-\>mediaResource-\>create($params);

So ein ähnliches Problem besteht auch beim anlegen von Produkten.

 

Beste Grüße
Patryk

Das Problem tritt aber nur bei der 2. ausführung aus.

Hi @Fabeck‍!

Wird eine Abhängigkeit vielleicht mit dem Media-Objekt zusammen erstellt?

Was mir da gerade auffällt: Es existiert in Deinem Screenshot ein Media::album, Media::albumId ist aber null. Versuch mal statt des Album-Objekts nur die Id des Albums am Media zu schreiben.

Moin,

ich übergebe in $params nur Album ID

Beste Grüße
Patryk

Hier wird die exception geworfen:

Hallo, wir haben dieses Probleme ebenfalls festgestellt! Beim löschen von Media Daten kommt jedes zweite mal ein Fehler.

 

try {
Shopware()->Container()->reset(‘models’);
$mediaResource = \Shopware\Components\Api\Manager::getResource(‘Media’);
$mediaResource->delete((int)$query[“media_id”]);
} catch (Exception $e) {
//echo 'Exception: '. $e->getMessage(). “\n”;
}

Das löschen der Bilder wirft bei mir seit der Version 5.6 Fehler, die vorher nicht da waren? Hat da jemand Infos drüber?

Hier unsere Meldung:

Exception: A new entity was found through the relationship ‘Shopware\Models\Article\Image#media’ that was not configured to cascade persist operations for entity: Shopware\Models\Media\Media@000000005deeb7c400000000097d5aba. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(…,cascade={“persist”}). If you cannot find out which entity causes the problem implement ‘Shopware\Models\Media\Media#__toString()’ to get a clue.

Ich nehme an, irgendetwas wurde bei Doctrine geändert, denn in den Models gab es von 5.5 auf 5.6 keine großen Änderungen die die Fehler begünstigen könnten.

@hsoebbing‍ Konntet ihr schon was herausfinden wie das schnellstmöglich behoben werden kann?

@ppe-stores‍ Ich habe mal versucht einen Test-Case für diesen Falll zu schreiben (hier: https://github.com/soebbing/shopware/blob/test-multiple-media-deletions/tests/Functional/Components/Api/MediaTest.php#L180). Dieser Test erzeugt erst zwei Medien über die Resource und löscht sie anschließend beide nacheinander wieder. Auf der aktuellen 5.6er Branch (die der Version 5.6.1 entspricht) funktioniert das in diesem Test problemlos. Gibt es vielleicht noch etwas das hier fehlt damit der Test fehlschlägt?

@hsoebbing‍ Versuch mal beim Erzeugen der Medien ein Album mitzugeben. Dies wird ja hauptsächlich von Doctrine bemängelt.

@ppe-stores‍ album ist ein Pflichtfeld, das wird aus der Methode getSimpleTestData schon mitgeliefert und ist aktuell -1 (für das Artikel-Album) shopware/MediaTest.php at test-multiple-media-deletions · soebbing/shopware · GitHub

Ich hab’ mal testweise ein/zwei andere Album-Ids probiert, funktionieren auch alle. Auch nicht-Standardalben funktionieren.

Echt komisch. Komischerweise nur bei Media der Doctrine Error. Andere Resourcen funktionieren.

Gibt es vielleicht irgendein Plugin was hier noch reingreift oder auf ein Event am Medium reagiert? Ich bin Dir für jeden Hinweis wie der Fehler entstehen könnte dankbar!

Moin,

 

wir haben es jetzt über $this->mediaResource->internalCreateMediaByFileLink($params[‘file’], $params[‘album’]); gelöst.

 

Beste Grüße
Patryk

Hi,

ich bekomme genau den gleichen Fehler, allerdings schon in der SW Version 5.3.5.

Konnte bisher auch nicht nachvollziehen warum der Fehler auftritt, aber die Methode internalCreateMediaByFileLink schafft vorerst Abhilfe.

 

Ich habe bei einem Kunden auch urplötzlich diese Probleme festgestellt. Auch bei Verwendung der internen API gab es dann Fehler bei Doctrine. INSERTs statt UPDATEs in den Datenbanken etc. Auch immer wieder der obere Fehler.

Nun haben wir die Lösung gefunden: Das Shopware Sicherheitsplugin ist dafür zuständig, diese Fehler zu erzeugen. Das haben wir durch Deaktivieren des Plugins herausgefunden und da wir das exakt gleiche Problem bei 3 Shops hatten, wo bei allen das Deaktivieren des Sicherheitsplugins geholfen hat, kann ich zu 99,9% sagen, dass es daran liegt. 

Man müsste mal schauen, welcher Fix an der API was geändert hat und speziell diesen dann deaktivieren.