与 Shopware6 实体定义中的 JSON 字段关联

Association with JSON field in Shopware6 entity definition

提问人:Moss 提问时间:11/7/2023 更新时间:11/7/2023 访问量:26

问:

我有一个以category_ids作为json字段的实体,我想添加一个与类别实体的关联以获取类别的名称 怎么做

这是我的实体定义,这个ManyToManyAssociationField不工作

protected function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new IdField('id', 'id'))->addFlags(new Required(), new PrimaryKey()),
            (new StringField('group_name','group_name')),
            (new JsonField('category_ids', 'category_ids'))->addFlags(new Required()),
            (new FkField('shipping_method_id', 'shipping_method_id', ShippingMethodDefinition::class))->addFlags(new Required()),
            (new CreatedAtField()),
            (new UpdatedAtField()),
            (new ManyToOneAssociationField('shippingMethod', 'shipping_method_id', ShippingMethodDefinition::class)),
            new ManyToManyAssociationField('category', CategoryDefinition::class, GroupDefinition::class, 'category_ids', 'id'),
        ]);
    }
协会 店装6

评论


答:

0赞 Ezycod 11/7/2023 #1

ManyToMany 关联不适用于 ,为此您需要一个,因此需要一个额外的数据库表。 请查看文档JsonFieldMappingEntityDefinition

如果你想坚持使用 JsonField,你可以添加一个带有标志的附加字段,并通过事件订阅者设置数据Runtime

1赞 j_elfering 11/7/2023 #2

通常不支持 JSON 字段中的关联。相反,您需要创建一个映射表和一个来处理关联。关于如何做到这一点,请查看文档MappingEntityDefinition

如果出于某种原因(例如,在不对映射表进行表扫描的情况下提高查询性能),则还需要在 JSON 字段中添加关联实体的 ID,则可以添加一个额外的索引器和一个索引器来填充此字段。请看一下这里如何做到这一点。例如,从核心看一下 SalesChannelIndexer,它填充了每个销售渠道的字段。ManyToManyIdFieldpaymentMethodIds