EntityExtension ManyToMany über API

Hallo Ich habe für Produkte eine EntityExtension geschrieben:

class ProductExtension extends EntityExtension
{
    public function extendFields(FieldCollection $collection): void
    {
        $collection->add(
            (new ManyToManyAssociationField(
                'bonoAccessoires',
                ProductDefinition::class,
                ProductAccessoireDefinition::class,
                'product_id',
                'accessoire_id')
            )->addFlags(new CascadeDelete(), new Inherited())
        );
        $collection->add(
            (new ManyToManyAssociationField(
                'bonoMainProducts',
                ProductDefinition::class,
                ProductAccessoireDefinition::class,
                'accessoire_id',
                'product_id')
            )->addFlags(new CascadeDelete(), new ReverseInherited('bonoAccessoires'))
        );
    }

    public function getDefinitionClass(): string
    {
        return ProductDefinition::class;
    }
}

Die Definition ist wie folgt aufgebaut:

class ProductAccessoireDefinition extends MappingEntityDefinition
{
    public const ENTITY_NAME = 'bono_product_accessoire';

    public function getEntityName(): string
    {
        return self::ENTITY_NAME;
    }

    protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new FkField('product_id', 'productId', ProductDefinition::class))->addFlags(new PrimaryKey(), new Required()),
            (new ReferenceVersionField(ProductDefinition::class,'product_version_id'))->addFlags(new PrimaryKey(), new Required()),
            (new FkField('accessoire_id', 'accessoireId', ProductDefinition::class))->addFlags(new PrimaryKey(), new Required()),
            (new ReferenceVersionField(ProductDefinition::class,'accessoire_version_id'))->addFlags(new PrimaryKey(), new Required()),

            new ManyToOneAssociationField('bonoProduct', 'product_id', ProductDefinition::class, 'id', false),
            new ManyToOneAssociationField('bonoAccessoire', 'accessoire_id', ProductDefinition::class, 'id', false),

            new CreatedAtField(),
        ]);
    }
}

Als Subscripber hab ich das ProductLoaderCriteriaEvent und onProductPageLoaded registriert.

class ProductPageSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            ProductLoaderCriteriaEvent::class => 'onProductCriteriaLoaded',
            ProductPageLoadedEvent::class => 'onProductPageLoaded'
        ];
    }

    public function onProductCriteriaLoaded(ProductLoaderCriteriaEvent $event): void
    {
        $event->getCriteria()->addAssociations(['bonoAccessoires.cover','bonoAccessoires.deliveryTime']);
        $event->getCriteria()->getAssociation('bonoAccessoires');
        $event->getCriteria()->addAssociations(['bonoMainProducts.cover','bonoMainProducts.deliveryTime']);
        $event->getCriteria()->getAssociation('bonoMainProducts');
    }

    public function onProductPageLoaded(ProductPageLoadedEvent $event):void
    {
        if($event->getPage() && $event->getPage()->getProduct() && $bonoAccessoires = $event->getPage()->getProduct()->getExtension('bonoAccessoires')) {
        	$bonoAccessoires->getElements();
        }
        if($event->getPage() && $event->getPage()->getProduct() && $bonoMainProducts= $event->getPage()->getProduct()->getExtension('bonoMainProducts')) {
         	$bonoMainProducts->getElements();

        }
    }
}

Jetzt habe ich das Problem wenn ich auf die Rest-API zugreife über

https://meinshop.de/api/v1/product/<uuid_des_produktes></uuid_des_produktes>

Dann sehe ich zwar die Extensions “bonoAccessoires” und “bonoMainProducts” gelistet, jedoch ohne Inhalt.

Auch wenn ich auf 

https://meinshop.de/api/v1/product/<uuid_des_produktes>/extensions/bonoAccessoires</uuid_des_produktes>

zugreife bekomme ich nichts angezeigt, obwohl verknüpfungen vorhanden sind.

In der Storefront kann ich jedoch auf alles zugreifen.

Und über die Produktapi mit einem PATCH-Request kann ich auch Produkte miteinander Verknüpfen… 

https://meinshop.de/api/v1/product/<uuid_des_produktes></uuid_des_produktes>

Mit JSON: 

{
	"bonoAccessoires": [
		{
			"id": "c06698bdc852422e87925c9c28e64b62"
		}
	]
}

ich bekomme jedoch nicht die Verknüpfungen über die Api ausgelesen.

 

Wo liegt mein Fehler?

Hi bono, Ich versuche gerade das Selbe umzusetzen und scheitere aber schon vorher bei den Relationships. Wenn ich die Verknüpfung herstellen will per PATCH bekomme ich eine Malformed UTF8 Fehlermeldung. Daher kannst du hier vielleicht mal die Migration hierzu posten? Und falls du es bereits gelöst hast vielleicht hier auch mal reinschreiben, würde sicher mehreren helfen da es von Shopware hierzu nichts gibt. LG Kevin

Nachtrag:  Normalerweise ziehst du dir die Extensions über /api/v1/product/{productId}/bonoExtensions

Habe mal deine Extension nachgebaut und was sehr komisch ist, ist dass ich die Produkte, welche angeknüpft wurden, über den o.g. Weg das BonoMainProduct ausspuckt, aber nicht umgekehrt. Auch kommt das selbe raus egal ob /api/v1/product/{productId}/bonoExtensions oder /api/v1/product/{productId}/BonoMainProduct. 

Ich scheitere daran, dass ich gerne eine Liste aller möglichen Flags haben möchte. Wo findet man die?