从Doctrine Query到Simfony2实体字段类型中的QueryBuilder

时间:2012-11-08 08:34:21

标签: symfony doctrine-orm dql query-builder

我在 Symfony2.1 表单中使用实体字段类型。在这里,我将使用query_builder参数仅返回与长复杂查询匹配的实体(请参阅official docs中的示例)。

显然,实体字段类型的query_builder参数接受Doctrine QueryBuilder 对象。另一方面,我有大型实体存储库,其中包含由 EntityManager createQuery()函数获取的复杂DQL查询,该函数返回Doctrine Query 对象。 所以,我无法在实体字段类型中直接使用所有这些查询。此外,重写所有查询以供QueryBuilder使用将是没有意义的。

是否有这种方法可以自动从 Query 对象转换为 QueryBuilder 对象?

1 个答案:

答案 0 :(得分:1)

来自Symfony2 docs:

  

query_builder - 输入:Doctrine\ORM\QueryBuilderClosure< ---

     

如果指定,则用于查询选项子集(及其选项)   (应该用于该领域)。此选项的值可以   要么是QueryBuilder对象,要么是Closure。如果使用Closure,则为   应该采用一个参数,即EntityRepository   实体。

现在,我没有时间尝试示例,但在我看来,如果您使用Closure,则可以返回ArrayCollection(或至少array)目标实体对象。您的ClosureEntityRepository的对象作为参数,因此无需重写所有内容。

介意给它一个机会? :)

更新

...抱歉让你久等了......

似乎这种方式不可能。相反,您必须手动使用choice表单类型和Feed实体对象(或我所做的对象存储库)。

我在这里做了一些简化的例子:http://ideone.com/LHdi2E

希望这会有所帮助......