我在Symfony2.1表单中使用实体字段类型。在这里,我将使用query_builder
参数仅返回与长复杂查询匹配的实体(请参阅官方文档中的示例)。
显然,实体字段类型的query_builder
参数接受 DoctrineQueryBuilder对象。另一方面,我有大型实体存储库,其中包含由返回原则查询对象的EntityManagercreateQuery()
函数获得的复杂 DQL 查询。 因此,我不能在实体字段类型中直接使用所有这些查询。此外,重写所有查询以使用QueryBuilder将是无稽之谈。
有没有办法自动从查询对象转换为查询构建器对象?
来自 Symfony2 文档:
query_builder- 类型:
DoctrineORMQueryBuilder
或Closure
<---如果指定,则用于查询选项的子集(及其 order)应用于该字段。此选项的值可以 要么是
QueryBuilder
对象,要么是Closure
。如果使用Closure
,则 应该采用单个参数,EntityRepository
这是 实体。
现在,我没有时间尝试一个例子,但在我看来,如果你使用Closure
你可以返回目标实体对象的ArrayCollection
(或至少array
)。您的Closure
将EntityRepository
的对象作为参数,因此无需重写所有这些内容。
介意试一试吗? :)
更新
。对不起,让你久等了...
看来这样是不可能的。相反,您必须使用表单类型并手动choice
馈送实体对象(或对象存储库)。
我在这里做了一些简化的例子:http://ideone.com/LHdi2E
希望这有帮助...