Hallo zusammen,
ich habe eine OneToOneAssociation meiner Entity zu product
erstellt.
Das FkField befindet sich bei meiner Entity. Soweit funktioniert die Association auch einwandfrei. Jedoch bekomme ich mit dal:validate den Fehler:
Missing version reference for foreign key column product.id for definition association my_entity.product
Was fehlt hier noch auf Seiten meiner Entity? Ich werde aus der product version nicht schlau.
Viele Grüße
Luca
Für eine Association müssen alle primary keys angegeben werden, welche in products
eine Kombination aus id
und version_id
ist.
Moin Alex,
Hier meine Migration:
$connection->executeStatement("
CREATE TABLE IF NOT EXISTS `my_entity` (
`id` BINARY(16) NOT NULL,
`product_id` BINARY(16) NOT NULL,
`css_class` VARCHAR(255) NULL,
`created_at` DATETIME(3) NOT NULL,
`updated_at` DATETIME(3) NULL,
PRIMARY KEY (`id`, `product_id`),
CONSTRAINT `fk.my_entity.product_id` FOREIGN KEY (`product_id`)
REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
");
Wie würde die Migration demnach aussehen? product_id
ist schon drin. Aber version_id
würde ja eine neue Spalte bedeuten. Einen weiteren foreign key aus product
lässt er mich aber nicht hinzufügen.
LG Luca
wieso nicht?
CREATE TABLE IF NOT EXISTS `my_entity` (
`id` BINARY(16) NOT NULL,
`product_id` BINARY(16) NOT NULL,
`product_version_id` BINARY(16) NOT NULL,
`css_class` VARCHAR(255) NULL,
`created_at` DATETIME(3) NOT NULL,
`updated_at` DATETIME(3) NULL,
PRIMARY KEY (`id`, `product_id`, `product_version_id`),
CONSTRAINT `fk.my_entity.product_id__product_version_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;
1 „Gefällt mir“
Hat geklappt, ich hatte einen Tippfehler in der CONSTRAINT.
Ich danke dir vielmals!
Zur Vollständigkeit hier noch meine EntityDefinition, die den Fehler mit einem ReferenceVersionField behebt:
return new FieldCollection([
(new IdField("id", "id"))->addFlags(new ApiAware(), new PrimaryKey(), new Required()),
(new ReferenceVersionField(ProductDefinition::class, "product_version_id"))->addFlags(new ApiAware(), new Required()),
(new FkField("product_id", "productId", ProductDefinition::class))->addFlags(new ApiAware(), new Required()),
(new StringField("css_class", "cssClass"))->addFlags(new ApiAware()),
(new OneToOneAssociationField("product", "product_id", "id", ProductDefinition::class, false))->addFlags(new ApiAware()),
]);