我在 Symfony2.1 表单中使用实体字段类型。在这里,我将使用query_builder
参数仅返回与长复杂查询匹配的实体(请参阅official docs中的示例)。
显然,实体字段类型的query_builder
参数接受Doctrine QueryBuilder 对象。另一方面,我有大型实体存储库,其中包含由 EntityManager 的createQuery()
函数获取的复杂DQL查询,该函数返回Doctrine Query 对象。
所以,我无法在实体字段类型中直接使用所有这些查询。此外,重写所有查询以供QueryBuilder使用将是没有意义的。
是否有这种方法可以自动从 Query 对象转换为 QueryBuilder 对象?
答案 0 :(得分:1)
来自Symfony2 docs:
query_builder - 输入:
Doctrine\ORM\QueryBuilder
或Closure
< ---如果指定,则用于查询选项子集(及其选项) (应该用于该领域)。此选项的值可以 要么是
QueryBuilder
对象,要么是Closure
。如果使用Closure
,则为 应该采用一个参数,即EntityRepository
实体。
现在,我没有时间尝试示例,但在我看来,如果您使用Closure
,则可以返回ArrayCollection
(或至少array
)目标实体对象。您的Closure
将EntityRepository
的对象作为参数,因此无需重写所有内容。
介意给它一个机会? :)
...抱歉让你久等了......
似乎这种方式不可能。相反,您必须手动使用choice
表单类型和Feed实体对象(或我所做的对象存储库)。
我在这里做了一些简化的例子:http://ideone.com/LHdi2E
希望这会有所帮助......