Order extension table wird bei editieren der Order gelöscht

Hallo zusammen,

ich habe eine Extension Tabelle auf die Tabelle order eingerichtet. Befüllen und Auslesen von Daten klappt auch alles, aber ich habe einen seltsamen Seiteneffekt - wenn ich in Shopware (6.4.4.1) die Bestellung bearbeiten will, wird ja eine Kopie der Bestellung mit neuer version_id angelegt. Klicke ich auf abbrechen, so werden alle Daten in meiner Extension Tabelle gelöscht. Die Tabelle wurde mit folgender Definition angelegt:

    protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new IdField('id', 'id'))->addFlags(new ApiAware(), new PrimaryKey(), new Required()),
            (new VersionField())->addFlags(new ApiAware()),

            (new FkField('order_id', 'orderId', OrderDefinition::class))->addFlags(new Required()),
            (new ReferenceVersionField(OrderDefinition::class))->addFlags(new Required()),
...
            new OneToOneAssociationField('order', 'order_id', 'id', OrderDefinition::class, false)
        ]);
    }

Das Migrationfile enthält folgende Tabellenerzeugung:

        CREATE TABLE IF NOT EXISTS `iwelt_order_address_extension` (
            `id` BINARY(16) NOT NULL,
            `version_id` BINARY(16) NOT NULL,
            `order_id` BINARY(16) NOT NULL,
            `order_version_id` BINARY(16) NOT NULL,
...
            `created_at` DATETIME(3) NOT NULL,
            `updated_at` DATETIME(3),
            PRIMARY KEY (`id`, `version_id`),
            CONSTRAINT `fk.iwelt_order_address_extension.order_id` 
                FOREIGN KEY (`order_id`, `order_version_id`) 
                REFERENCES `order` (`id`, `version_id`) 
                ON DELETE CASCADE ON UPDATE CASCADE
        )
            ENGINE = InnoDB
            DEFAULT CHARSET = utf8mb4
            COLLATE = utf8mb4_unicode_ci;

Wie kann ich meine Order Extension dazu bringen, dass dort auch ein neuer Eintrag mit korrekter Version ID angelegt wird?

Viele Grüße,
Mario Schreck

1 „Gefällt mir“

Hallo @M_Schreck ,

wir stehen aktuell vor genau dem gleichen Problem.

Vielleicht hilft dir unser temporärer fix weiter. Wir haben den Foreign Key Constraint fürs erste gelöscht und beziehen uns bei der Extension nur auf die orderId. Dann wird die Extension nicht gelöscht.

Wir werden es dich wissen lassen sobald wir eine Lösung dafür gefunden haben.

lg Marc

Ich glaube, ich habe die Lösung gefunden. Es lag nicht an den obigen Einträgen, sondern die Entity Extension muss angepasst werden:

class xxxxExtension extends EntityExtension
{
    public function extendFields(FieldCollection $collection): void
    {
        $collection->add(
            (new OneToOneAssociationField(
                'xxxxExtension',
                'id',
                'order_id',
                OrderAddressExtensionDefinition::class,
                true))->addFlags(new ApiAware(), new CascadeDelete())
        );
    }

Ich hatte einfach keine Flags eingetragen, durch Angabe von ->addFlags(new ApiAware(), new CascadeDelete()) erzeugt es jetzt die entsprechenden Einträge.

Viele Grüße,
Mario Schreck

Hallo @M_Schreck ,
super vielen Dank! mit der Flag funktioniert es nun auch bei uns!
lg Marc