我想创建一个表单,其数据类型基于当前登录的用户的集合类型。我正在遵循Symfony cookbook中这个章节。当
我不想复制代码并在表单中创建新的QueryBuilder。如何最好地使用Repository中的查询?我考虑在Repository中有两个函数,一个返回数组,另一个返回QueryBuilder。但Symfony文档中的注释"或者在你的repository上调用一个方法(更好的方法!)"让我认为还有更好的方法处理这种情况。
query_builder
选项是闭包函数并从DQL获取数据时,一切正常。由于需要从代码的不同位置获取数据,我更喜欢在Repository类中定义查询。这是我的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();
}
这个函数在控制器中调用时会返回一系列文章的数组。以下是Symfony文档的片段:
$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函数时,我会得到一个错误:期望类型为“Doctrine\ORM\QueryBuilder”的参数,“给定数组”
。我理解这个错误,因为我的Repository返回一个Entity数组,而不是QueryBuilder。我不想复制代码并在表单中创建新的QueryBuilder。如何最好地使用Repository中的查询?我考虑在Repository中有两个函数,一个返回数组,另一个返回QueryBuilder。但Symfony文档中的注释"或者在你的repository上调用一个方法(更好的方法!)"让我认为还有更好的方法处理这种情况。
query_builder
需要一个 QueryBuilder 对象,无论是直接给出还是由闭包返回。 - Florent