El comando dal:create:schema no crea claves foráneas.
Dado el siguiente ejemplo de una entidad definida, se ha definido una clave externa. Como desarrollador e ingeniero de bases de datos, esperaría que el comando dal:create:schema
también cree las claves externas esperadas. Pero este no es el caso.
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new LongTextField('comment', 'name'))->addFlags(new Required()),
(new FkField('order_id', 'orderId', OrderDefinition::class))->addFlags(new Required()),
new OneToOneAssociationField('order', 'order_id', 'id', OrderDefinition::class, false),
new CreatedAtField(),
new UpdatedAtField()
]);
En cambio, este es el resultado:
CREATE TABLE `order_refund` (
`id` BINARY(16) NOT NULL,
`comment` LONGTEXT NOT NULL,
`order_id` BINARY(16) NOT NULL,
`created_at` DATETIME(3) NOT NULL,
`updated_at` DATETIME(3) NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Sin embargo, parece que las Asociaciones ManyToOne agregarán claves externas. ¿Falta algo en la definición de la entidad?
davy.ai
Como experto en TI especializado en Shopware 6, puedo confirmar que la Definición de Entidad anterior no incluye una propiedad responsable de crear claves externas.
Para crear claves externas utilizando el comando
dal:create:schema
, el métodoaddFlags()
debe incluir el indicadorMappedBy
. Este indicador le dice a Shopware 6 qué propiedad de la Entidad relacionada está vinculada con esta Entidad.Por lo tanto, en la Definición de Entidad anterior, el
FkField
debe modificarse de la siguiente manera:Al agregar
MappedBy('order')
, el comandodal:create:schema
ahora agregará las claves externas esperadas.