我在dev-master中使用symfony 2.2.3和sonata admin。
我想要一个自定义字段来显示特定群组的用户。
我还没有找到如何与Sonata用户实体和Sonata Group实体建立关系。
doctrine架构创建3个表:fos_user_user,fos_user_group和关系表fos_user_user_group。
我的Admin类中有一个类似字段的表单:
->add('coach', 'entity', array(
'class' => 'ApplicationSonataUserBundle:User',
'empty_value' => 'Choisissez un coach',
'property' => 'username',
'query_builder' => function(\Application\Sonata\UserBundle\Entity\UserRepository $er) {
return $er->getCoachs();
},
))
我在UserRepository中的函数getCoachs():
public function getCoachs()
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder(array('u', 'g'))
->select('u.username, g.id')
->from('ApplicationSonataUserBundle:User', 'u')
->innerJoin('ApplicationSonataUserBundle:Group', 'g', 'WITH','g.id = u.group_id')
->where('g.id = :id')
->setParameter('id', 1);
return $qb;
}
我知道查询不起作用,因为innerJoin不正确。
我的用户实体和组实体只是使用id扩展BaseUser和GroupUser。
有人知道正确的查询吗?
谢谢。
编辑:
好的,我找到了查询的解决方案:
public function getCoachs()
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder('u')
->select('u.username')
->from('ApplicationSonataUserBundle:User', 'u')
->innerJoin('u.groups', 'g')
->where('g = :id')
->setParameter('id', 1);
return $qb;
}
但是,我有这个错误:
Expected argument of type "object or array", "string" given
我不明白,因为我返回了我的函数getCoachs(),它返回一个查询构建器......
不知道?
答案 0 :(得分:2)
好的,我找到了解决方案!
我的查询是:
public function getCoachs()
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder('u')
->select('u') // and not u.username
->from('ApplicationSonataUserBundle:User', 'u')
->innerJoin('u.groups', 'g')
->where('g = :id')
->setParameter('id', 1);
return $qb;
}
实际上,我返回了特定列(用户名)的值,但您必须返回对象User。