我正在使用 Symfony2.1 形式的实体字段类型。在这里,我将使用 query_builder
param 仅返回与长复杂查询匹配的实体(参见 official docs 中的示例)。
显然是query_builder
实体字段类型的 param 接受 Doctrine QueryBuilder 对象。另一方面,我有大型实体存储库,其中包含由 EntityManager 获得的复杂 DQL 查询 createQuery()
返回 Doctrine Query 对象的函数。
所以,我不能直接在实体字段类型中使用所有这些查询。此外,重写所有查询以使用 QueryBuilder 将是无意义的。
有没有这样一种方法可以自动从 Query 对象转换为 QueryBuilder 对象?
最佳答案
来自 Symfony2 文档:
query_builder - type:
Doctrine\ORM\QueryBuilder
or aClosure
<---If specified, this is used to query the subset of options (and their order) that should be used for the field. The value of this option can either be a
QueryBuilder
object or aClosure
. If using aClosure
, it should take a single argument, which is theEntityRepository
of the entity.
现在,我没有时间尝试一个例子,但在我看来,如果你使用
Closure
您可以返回 ArrayCollection
(或至少 array
)的目标实体对象。您的 Closure
获取 EntityRepository
的对象作为一个论点,所以没有必要重写所有这些东西。介意试一试吗? :)
更新
……抱歉让您久等了……
这种方式似乎是不可能的。相反,您必须使用
choice
手动表单类型和馈送实体对象(或我所做的对象存储库)。我在这里做了一些简化的例子:http://ideone.com/LHdi2E
希望这可以帮助...
关于symfony - Simfony2 实体字段类型中从 Doctrine Query 到 QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285281/