es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  

Answer

  1. Avatar for 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étodo addFlags() debe incluir el indicador MappedBy. 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:

    (new FkField('order_id', 'orderId', OrderDefinition::class))->addFlags(new Required(), new MappedBy('order'));
    

    Al agregar MappedBy('order'), el comando dal:create:schema ahora agregará las claves externas esperadas.

Comments are closed.