Hallo.
Ich schlage mich mit dem Problem jetzt schon seit Stunden rum und komme einfach nicht weiter. Hoffe jemand kann helfen. Entwickelt wurde ein Plugin welches die Produkt Entity um eine ManyToMany Association erweitert. Jedem Produkt können beliebig viele Textbausteine zugewiesen werden. Es gibt 3 DB Tabellen. Tabelle1 enthält die Bausteine, Tabelle2 die Übersetzungen und Tabelle3 das Mapping zur den Produkten.
Das funktioniert auch eigentlich tadellos als ich die Produkt-View (Maske) um ein sw-entity-many-to-many-select erweitert hatte um die Bausteine auszuwählen. Problem war hier lediglich die fehlende Sortiermöglichkeit der ausgewählten Bausteine. Um diese Funktion herzustellen, habe ich das Auswahlelement durch ein sw-entity-single-select + sw-data-grid ersetzt (Habe mir diese Logik beim Crossselling abgeschaut) und den JS Code entsprechend der Vorlage (Crossselling) angepasst. Leider lässt sich das Produkt jetzt nicht mehr speichern sobald ein Textbaustein ausgewählt wurde. Bei Speichern kommt es zu einem Fehler 500 mit folgender Meldung:
An exception occurred while executing 'REPLACE INTO bst_textbuilder_product (bst_textbuilder_id, product_id, product_version_id, created_at) VALUES ('�Q�aC��
���jK¾K��u,4%’,‚2020-12-27 12:09:52.250‘);’:↵↵SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (shopware
.bst_textbuilder_product
, CONSTRAINT fk.bst_textbuilder_product.bst_textbuilder_id
FOREIGN KEY (bst_textbuilder_id
) REFERENCES bst_textbuilder
(id
) ON DELETE CASCADE ON UPD)"
Hier meine Tabellendefinition mit dem Constraint:
$connection->executeUpdate('
CREATE TABLE IF NOT EXISTS `bst_textbuilder_product` (
`bst_textbuilder_id` BINARY(16) NOT NULL,
`product_id` BINARY(16) NOT NULL,
`product_version_id` BINARY(16) NOT NULL,
`created_at` DATETIME(3) NOT NULL,
PRIMARY KEY (`bst_textbuilder_id`,`product_id`,`product_version_id`),
CONSTRAINT `fk.bst_textbuilder_product.bst_textbuilder_id` FOREIGN KEY (`bst_textbuilder_id`)
REFERENCES `bst_textbuilder` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk.bst_textbuilder_product.product_version_id__product_id` FOREIGN KEY (`product_id`,`product_version_id`)
REFERENCES `product` (`id`,`version_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
');
Die IDs werden eigentlich korrekt ermittelt aber sehen in der Consolen Ausgabe kryptisch aus. Ist das normal oder liegt hier schon das Problem? Würde erklären warum das Constraint fehl schlägt da es keinen Baustein für diese kryptische ID gibt. Hier noch der Code zum erzeugen eines neuen Mapping-Eintrags wenn in der Produktmaske ein neuer Baustein dazugewählt wird:
const newItem = this.productTextsProductRepository.create();
newItem.bstTextbuilderId = itemId;
newItem.position = this.assignedItems.length + 1;
newItem.productId = this.product.id;
newItem.product = this.product;
this.isLoadingData = false;
this.assignedItems.add(newItem);
this.productTextsRepository.get(itemId, { ...Context.api, inheritance: true }).then((productText) => {
newItem.productText = productText;
this.isLoadingData = false;
});
Was läuft hier schief? Was mache ich falsch? Hoffe ich habe mich verständlich ausgedrückt und das jemand schon mal vor ähnlichen Problem stand und sie lösen konnte. Danke schon einmal im Voraus!!!
Gruß Mike