【问题标题】:How can I build a Form displaying a collection of collections?如何构建显示集合集合的表单?
【发布时间】:2013-06-07 16:41:02
【问题描述】:

首先,我有这个数据库架构:

我有categories,其中包含products。 我也有attributes(例如“color”),其中包含values(例如“red”、“green”等)。

所以,最后,我可以通过ProductAttributeValues 表将attribute valueproduct 关联起来,将这些attributes 分配给products,这个表是由Doctrine 自动创建的,因为ProductAttributeValue 之间存在多对多关系。

这样我就可以拥有category(汽车)和products(雷诺梅甘娜、福特福克斯等)。每个product 可以有多个attributes 及其values(颜色:灰色,发动机类型:汽油等)。在最后一个示例中,颜色为Attribute,灰色为AttributeValue。发动机类型是另一个Attribute,汽油是一个AttributeValue

好的,一旦我的实体填充了数据(类别、属性、属性值和产品),我如何创建一个表单来为给定的 product 关联 attributesvalues

或多或少,表格应该是这样的:

所以,当我在“汽车”category 中时,我必须显示属于这个category 的所有attributes(引擎和颜色)。同时,我必须为这些attributes 显示所有values(汽油、柴油、电动...用于发动机,灰色、红色、蓝色...用于颜色)。

【问题讨论】:

    标签: symfony symfony-2.2


    【解决方案1】:

    如果您正在尝试构建类似于图像上的表单,则您不是在寻找集合字段类型,而是 entity 带有 queryBuilder 的字段类型。

    使用实体字段类型,您可以group您的属性,即car.category。

    ... 或者您可以使用两个实体字段并为字段的 queryBuilder 中的另一个选择框过滤结果(即仅显示类别 gas 的属性)。最好通过在查询构建器的 ->where() 语句中使用的表单构建器中使用注入的类别属性来实现。

    如果您想向现有类别或属性添加/删除/编辑多个新类别或属性,则需要collection form-type。但是你的表单看起来会明显不同。

    【讨论】:

    • 考虑我拥有的表,尤其是 Attribute 和 AttributeValue 实体。
    • 我做到了,您对此有何看法?除了您的架构对我来说看起来很奇怪的事实之外 - 因为 ProductAttributeValues 表并不是真正必要的......您想要实现的目标可以通过实体字段和正确的查询来完成。这就是你要求的对吗?
    • 请仔细阅读,你觉得奇怪的表是 Doctrine 自动创建的,因为是多对多关系。
    • 我接受你的回答,因为它只生成一个带有分组选项的选择标签,但它并不能完全解决我所描述的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多