de-swebhosting-shopware-plugin/smart-relation-sync

Smart relation handling for the Sync-API

Maintainers

👁 astehlik

Package info

github.com/astehlik/shopware-plugin-smart-relation-sync

Type:shopware-platform-plugin

pkg:composer/de-swebhosting-shopware-plugin/smart-relation-sync

Statistics

Installs: 8 131

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v2.0.0 2026-02-13 21:23 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 84568308eb580cb0cfbc8b50adfca7a37965bb42


README

The goal of this Plugin is to ease the pain of dealing with relations in Shopware.

Shopware native

Before explaining the solution in this Plugin, please be aware that there is a Shopware native way in the Sync-API to archive the same result. For example to assign a new category, you can send the following HTTP request:

POST /api/_action/sync
Content-Type: application/json

{
 "change-category": {
 "entity": "product",
 "action": "upsert",
 "payload": [
 {
 "id": "<the product id>",
 "categories": [
 {"id": "<the new category id 1>"}
 {"id": "<the new category id 2>"}
 ]
 }
 ]
 },
 "delete-obsolete": {
 "entity": "product_category",
 "action": "delete",
 "criteria": [
 {
 "type": "equals",
 "field": "productId",
 "value": "<the product id>"
 },
 {
 "type": "not",
 "operator": "and",
 "queries": [
 {
 "type": "equalsAny",
 "field": "categoryId",
 "value": ["<the new category id 1>", "<the new category id 2>"]
 }
 ]
 }
 ]
 }
}

Quick start

After installing the Plugin, you can enable automatic relation cleanup in the DAL or in the Sync-API, for example:

$productData = [
 'id' => '...',
 'categories' => [['id' => '...']],
 'categoriesCleanupRelations' => true,
];
$this->productRepository->upsert([$productData], $context);
POST /api/_action/sync
Content-Type: application/json

{
 "write-product": {
 "entity": "product",
 "action": "upsert",
 "payload": [
 {
 "id": "...",
 "categories": [{ "id": "..." }],
 "categoriesCleanupRelations": true
 }
 ]
 }
}

By setting categoriesCleanupRelations to true, the plugin will automatically remove all category relations that are not in the given array.

You can do this for any many-to-many or one-to-many relation with the CleanupRelation suffix.