我有实体,我们称之为“Group”,它有一个Items集合。 每个项目都与SubItem有关。总结一下,它看起来像:
Group {
Items: Collection [
Item { SubItem },
Item { SubItem },
...
Item { SubItem },
]
}
我创建了一个表单,我可以通过 CollectionType 创建/编辑这样的组,您可以给它命名并添加/删除项目。我只用一个查询就可以加载这样的表单,但是当我发送表单时,symfony会在集合中的Item中为每个SubItem触发一个查询,如果SubItems都是相同的事件,则查询如下:
SELECT
... (all fields list)
FROM
subItem s0_
WHERE
s0_.id IN (?)
举个例子:
它将生成其中4个查询:
SELECT ... FROM subItem s0_ WHERE s0_.id IN ('SubItemA.id')
SELECT ... FROM subItem s0_ WHERE s0_.id IN ('SubItemB.id')
SELECT ... FROM subItem s0_ WHERE s0_.id IN ('SubItemB.id')
SELECT ... FROM subItem s0_ WHERE s0_.id IN ('SubItemB.id')
我在任何DQL中都不使用 WHERE IN()。你有什么想法,或者如何跟踪它们?
编辑:我发现了一些东西。 SubItem是EntityType,当我通过DESC / ASC设置'query_builder'时,它确实出现在那些查询中。但我仍然不知道 WHERE id IN()的原因和来源。这些查询只是关于以表格形式发送的子项目。填充EntityType字段的整个列表更长。
编辑2:这些查询似乎只是检查所选实体是否存在的查询。我开始使用ChoiceType而不是模型转换器,我提供我的表单女巫$ id => $ entity数组,所以我可以从id转换回实体,我需要只获取一次实体列表,而不是像symfony那样每个EntityType字段获取一次。