Bug in Rest-API Media, delete ?

Hy, seit dem letzten Update funktioniert die Löschfunktion von Mediadateien nicht mehr über die Rest-API. Per ‘get’ habe ich mir die kompletten Artikeldaten geholt, dort sind auch die Image Daten enthalten. [2] =\> Array ( [id] =\> 16236 [articleId] =\> 4231 [articleDetailId] =\> [description] =\> [path] =\> 105714\_1 [main] =\> 1 [position] =\> 3 [width] =\> 1832 [height] =\> 1069 [relations] =\> [extension] =\> jpg [parentId] =\> [mediaId] =\> 6731 ) Wenn ich mir nun die MediaId nehme und damit den Löschbefehl sende, bekomme ich die Meldung, das diese MediaId nicht gefunden wurde. Ich habe es dann nochmal mit der ID versucht, bekomme aber ebenfalls eine Fehlermeldung. helper::$api-\>delete('media/6731'); API: No Success: Media by id 6731 not found Ebenfalls scheint es nicht mehr zu funktionieren ein Replace der Bilddaten des Artikels durchzuführen. $clear\_images = Array ( [\_\_options\_images] =\> Array ( [replace] =\> 1 ) [images] =\> Array ( [0] =\> Array ( [id] =\> 7500 [articleId] =\> 4231 [articleDetailId] =\> [description] =\> [path] =\> 105714\_2 [main] =\> 1 [position] =\> 1 [width] =\> 1832 [height] =\> 1069 [relations] =\> [extension] =\> jpg [parentId] =\> [mediaId] =\> 1767 ) [1] =\> Array ( [id] =\> 14644 [articleId] =\> 4231 [articleDetailId] =\> [description] =\> [path] =\> 105714\_0 [main] =\> 1 [position] =\> 2 [width] =\> 1200 [height] =\> 1200 [relations] =\> [extension] =\> jpg [parentId] =\> [mediaId] =\> 5966 ) ) ) helper::$api-\>put('articles/'.$this-\>ArticleID, $clear\_images); Und als Fehlermeldung: API: No Success: \Shopware\Models\Article\Image by id 7500 not found Ich habe auch schon versucht das komplette Array des Artikels zu ersetzen, aber das bringt nichts, die Bilder bleiben bestehen. https://issues.shopware.com/#/issues/SW-13291

Hy, hier einmal die Error Meldung: exception 'Shopware\Components\Api\Exception\CustomValidationException' with message '\Shopware\Models\Article\Image by id 14647 not found' in /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/Api/Resource/Resource.php:396 Stack trace: #0 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/Api/Resource/Article.php(1663): Shopware\Components\Api\Resource\Resource-\>getOneToManySubElement(Object(Doctrine\ORM\PersistentCollection), Array, '\\Shopware\\Model...') #1 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/Api/Resource/Article.php(738): Shopware\Components\Api\Resource\Article-\>prepareImageAssociatedData(Array, Object(Shopware\Models\Article\Article)) #2 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/Api/Resource/Article.php(613): Shopware\Components\Api\Resource\Article-\>prepareAssociatedData(Array, Object(Shopware\Models\Article\Article)) #3 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Controllers/Api/Articles.php(116): Shopware\Components\Api\Resource\Article-\>update('5396', Array) #4 /var/www/vhosts/\*\*\*/httpdocs/engine/Library/Enlight/Controller/Action.php(158): Shopware\_Controllers\_Api\_Articles-\>putAction() #5 /var/www/vhosts/\*\*\*/httpdocs/engine/Library/Enlight/Controller/Dispatcher/Default.php(523): Enlight\_Controller\_Action-\>dispatch('putAction') #6 /var/www/vhosts/\*\*\*/httpdocs/engine/Library/Enlight/Controller/Front.php(227): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #7 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Kernel.php(148): Enlight\_Controller\_Front-\>dispatch() #8 /var/www/vhosts/\*\*\*/httpdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(492): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #9 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #10 /var/www/vhosts/\*\*\*/httpdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(263): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #11 /var/www/vhosts/\*\*\*/httpdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(280): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>pass(Object(Symfony\Component\HttpFoundation\Request), true) #12 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/HttpCache/AppCache.php(133): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>invalidate(Object(Symfony\Component\HttpFoundation\Request), true) #13 /var/www/vhosts/\*\*\*/httpdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(209): Shopware\Components\HttpCache\AppCache-\>invalidate(Object(Symfony\Component\HttpFoundation\Request), true) #14 /var/www/vhosts/\*\*\*/httpdocs/engine/Shopware/Components/HttpCache/AppCache.php(114): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #15 /var/www/vhosts/\*\*\*/httpdocs/shopware.php(101): Shopware\Components\HttpCache\AppCache-\>handle(Object(Symfony\Component\HttpFoundation\Request)) #16 {main} Channel: core { "uri": "/api/articles/5396?", "method": "PUT", "query": { "module": "api", "controller": "articles", "action": "5396" }, "post": { "\_\_options\_images": { "replace": true }, "images": [{ "id": 14647, "articleId": 5396, "articleDetailId": null, "description": "", "path": "100153\_0", "main": 1, "position": 1, "width": 500, "height": 300, "relations": "", "extension": "jpg", "parentId": null, "mediaId": 6607 }, { "id": 14649, "articleId": 5396, "articleDetailId": null, "description": "", "path": "100153\_1", "main": 1, "position": 2, "width": 500, "height": 300, "relations": "", "extension": "jpg", "parentId": null, "mediaId": 6692 }, { "id": 14651, "articleId": 5396, "articleDetailId": null, "description": "", "path": "100153\_2", "main": 2, "position": 3, "width": 500, "height": 362, "relations": "", "extension": "jpg", "parentId": null, "mediaId": 5856 }] } }

wann hat die API jemals funktioniert? :smiley: überprüf mal, ob das Update nicht die Ressource komplett weggepfercht hat… nach den Erfahrugen die ich mit SW und der… ehm… “API”… gemacht habe, wäre es ein Wunder wenn die mal was stabiles auf den Markt werfen würden… doch dazu wird es nie kommen, denn SW will ja geld verdienen und wie machen die das? … riiichtig… mit teurem support :wink:

Hi, gibt es auch konstruktive Beiträge von dir, Flaki? Ich glaube, das bringt uns in der Sache nicht weiter. Bitte von weiteren Threadentführung und Geflame absehen, danke. @Kadis: Von welcher Version auf welche Version hast du das Update gemacht? Wir haben vor einiger Zeit das Handlung von Subressourcen überarbeitet. Gerade bei deinem zweiten Fehler könnte ich mir vorstellen, dass es es vll. hilft, wenn du nur eine “mediaId” angibst - dann sollte der den Lookup des “Image” Entities nicht machen. Ein wenig wirkt es auch so, als sei deine s_articles_img-Tabelle inkonsistent, das wäre zumindest auch eine mögliche Erklärung. Existiert bspw. die ID “14647” darin? Kann natürlich auch immer sein, dass wir eine Regression im Code haben - aber normalerweise wäre das schon eher bei uns aufgeschlagen? Danke auf jeden Fall, dass du auch eben ein Ticket auf gemacht hast :thumbup: Daniel

ach nä, da meldet sich ja mal jemand… haben wir schon wieder ein schaltjahr? -.- mein beitag hat nichts mit flaming zu tun, es sind TATSACHEN

Hallo, das können für dich gerne Tatsachen sein, dennoch hat das nichts in diesem Thread verloren, denn danach hat der Threadersteller nicht gefragt. Wenn du mit dem Konstrukt eines Community-Forums nicht klar kommst, dann ist Shopware ggf. nicht die korrekte Lösung für dich. Das Forum basiert hier auf „User helfen Usern“, unsere Hilfe hier ist rein aus Kulanz und wird von den meißten auch in Ihrer Freizeit angeboten. Ich bitte dich von weiteren Kommentaren abzusehen und ein gewisses Maß an Respekt zu zeigen. Solltest du dazu nicht in der Lage sein, werden wir uns hier gerne eine Lösung für das Verhalten überlegen. Bisher war dies noch nie nötig. Viele Grüße Moritz

2 „Gefällt mir“

Hy, Danke für die Rückmeldung. Diese Meldung bekommen wir seit dem Update von 5.0 auf 5.1. Hier hat sich ja auch einiges an der Bilder Logik verändert (z.b. das mit dem Pfad im /media/image/ Ordner) ich habe eben die Tabelle geprüft. hier habe ich auch den entsprechenden Eintrag drin. id articleID img main description position width height relations extension parent\_id article\_detail\_id media\_id 14647 5396 100153\_0 1 1 500 300 jpg NULL NULL 6607 Ich versuche ja die MediaId zu nehmen aber anscheint findet er diese nicht mehr per API. Testweise hatte ich mal die ID genommen, aber selbst damit findet er nichts. Hinzufügen geht, löschen und ändern nicht.

Hi, hm, ok. Die neuen Medien-URLs sollten das Verhalten nicht hervorrufen, das läuft auf einem anderen Layer. Ich habe das Ticket intern nochmal um den Hinweis auf diesen Thread ergänzt und die 5.0 / 5.1 Info hinzugefügt - dann muss sich das einer von den Core-Jungs mal näher ansehen. So sehe ich leider erstmal keinen offenkundigen Fehler. Besten Gruß, Daniel

Hi, ich konnte das Problem mit nicht gefundenen Medien leider nicht nachstellen. Zur Absicherung habe ich aber nun einen Unittest implementiert, der diesen Fall abfängt. (Link zum commit folgt) Um Bilder bei einem Artikel zu ersetzen muss natürlich, wie du es auch getan hast, die Option replace = 1 gesetzt sein. Als “images” darfst du aber keine ID mitsenden, da er sonst von der ID der Relation zwischen Artikel und Bild ausgeht (s_articles_img). Es reicht also aus wenn du Arrays mit einem Feld angibst. Das kann entweder “link” sein, um eine URL anzugeben oder “mediaId”, um ein vorhandenes Medienobjekt zu verwenden. Gruß, Jan

Hallo Herr Bücker, ich habe gerade mal den Vorschlag bei einem Artikel eingespielt. Das führt leider zu Chaos. Die Varianten Zuordnungen gehen komplett verloren. Ich glaube ich muss hier doch den weg gehen und direkt auf s_articles_img, s_articles_img_attributes, s_article_img_mappings, s_article_img_mapping_rules und die Zuordnungen manuell löschen damit es sauber ist helper::$db-\>real\_query("DELETE FROM `s_article_img_mapping_rules` WHERE `mapping_id` = (SELECT `id` FROM `s_article_img_mappings` WHERE `image_id` = ".(int)$foundImageID.");"); helper::$db-\>real\_query("DELETE FROM `s_article_img_mappings` WHERE `image_id` = ".(int)$foundImageID.";"); helper::$db-\>real\_query("DELETE FROM `s_articles_img_attributes` WHERE `imageID` = ".(int)$foundImageID.";"); helper::$db-\>real\_query("DELETE FROM `s_articles_img` WHERE `id` = ".(int)$foundImageID.";"); Sollte reichen um die Zuordnung zu einem Bild zo löschen oder habe ich etwas vergessen?