Symfony在表单handleRequest期间生成大量查询,每个查询都针对每个集合项

时间:2016-07-08 05:36:36

标签: doctrine-orm symfony

我有实体,我们称之为“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 (?)

举个例子:

Example form data

它将生成其中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字段获取一次。

0 个答案:

没有答案