首页 文章

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

提问于
浏览
3

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

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

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

1 回答

  • 1

    来自Symfony2文档:

    query_builder - 类型:Doctrine \ ORM \ QueryBuilder或Closure <---如果指定,则用于查询应该用于该字段的选项子集(及其顺序) . 此选项的值可以是QueryBuilder对象或Closure . 如果使用Closure,它应该采用单个参数,即实体的EntityRepository .

    现在,我没有时间尝试一个例子,但在我看来,如果你使用 Closure ,你可以返回目标实体对象的 ArrayCollection (或至少 array ) . 你的 Closure 获取 EntityRepository 的对象作为参数,因此不需要重写所有这些东西 .

    介意给它一个机会? :)

    更新

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

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

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

    希望这可以帮助...

相关问题