【发布时间】:2013-07-14 15:32:30
【问题描述】:
我正在尝试根据正在登录的用户创建一个包含集合类型数据的表单。我正在关注this chapter of the Symfony cookbook。
当query_builder 选项是我从 DQL 获取数据的闭包时,一切正常。由于需要从代码中的不同位置获取数据,我更愿意在 Repository 类中定义查询。
这是我存储库中的函数:
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
这个函数在 Controller 中调用并返回一个 Article 数组时起作用。这是 symfony 文档的 sn-p :
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
当我在 query_builder 中调用我的 Repository 函数时,我收到一个错误:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given,我可以理解这是因为我的 Repository 返回的是一个实体数组,而不是一个 QueryBuilder。
我不想复制代码并在表单中创建新的 QueryBuilder。使用来自 Repository 的查询的最佳做法是什么?我正在考虑在存储库中有两个函数,一个返回一个数组,另一个返回 QueryBuilder,但是 Symfony 文档中的注释“或者在你的存储库上调用一个方法(更好!)”让我认为这种情况有更好的方法。
【问题讨论】:
标签: symfony symfony-forms dql query-builder