Rest API PlugIn für Property Synchronisation

Hallo Shopware Community Wir versuchen, unser erstes PlugIn zu entwickeln für die Synchronisation von Property Group, Option und Values mit unserem ERP. Damit wir mit dem CSV-Import für die normalen Artikeldaten arbeiten können, sind wir auf vordefinierte IDs für die Property Values angewiesen, das heisst wir müssen die Objekte mit vordefinierter ID einfügen können. Erste Versuche, dies mit der Property Group zu bewerkstelligen, scheiterten leider an Doctrine. Wir haben eine neue Klasse ZeusGroup von Shopware\Models\Property\Group abgeleitet, um die ID setzen zu können: [code]<?php /**

  • Erweiterung der Klasse Shopware\Models\Property\Group
    */
    namespace Shopware\CustomModels\ZeusConnector;

use Shopware\Models\Property\Group;

class ZeusGroup extends Group
{
public function setId($id)
{
$this->id = $id; return $this; } } ?> [/code] Zusätzlich haben wir eine neue Klasse ZeusPropertyGroup von PropertyGroup abgeleitet, um unsere neue Klasse ZeusGroup zu instanzieren und die ID zuzuweisen: [code]<?php /**

  • Erweiterung der Klasse Shopware\Components\Api\Resource\PropertyGroup
    */
    namespace Shopware\ZeusConnector;

use Shopware\Components\Api\Resource\PropertyGroup;
use Shopware\Components\Api\Exception as ApiException;
use Shopware\CustomModels\ZeusConnector\ZeusGroup;

class ZeusPropertyGroup extends PropertyGroup
{
/**
* @param array $params
* @return \Shopware\Models\Property\Group
* @throws \Shopware\Components\Api\Exception\ValidationException
* @throws \Exception
*/
public function create(array $params)
{
$this->checkPrivilege(‘create’); $em = $this->getManager(); $property = new ZeusGroup(); $property->fromArray($params); $metadata = $em->getClassMetaData(get_class($property)); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); $metadata->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator()); $violations = $em->validate($property); if ($violations->count() > 0) { throw new ApiException\ValidationException($violations); } $property->setId(99); // manueller Test $em->persist($property); $em->flush(); $this->flush(); return $property; } } ?> [/code] Leider funktioniert es weder mit fromArray($params), noch manuell mit ->setId eine eigene ID zuzuweisen. Doctrine moniert folgenden Fehler: [quote] Entity of type is missing an assigned ID for field ‘id’. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly."} [/quote] Wenn ich die $metadata-Zeilen auskommentiere, funktioniert der Insert, allerdings mit einem AUTOINCREMENT value. Wie bringe ich Doctrine dazu, die manuell zugewiesene Id an MySQL weiterzuleiten?

Da wir keine andere Lösung finden konnten, mussten wir nun leider unter Umgehung des Doctrine ORM direkt auf MySQL zugreifen, um die Daten synchronisieren zu können.