0

我在 dev-master 中使用 symfony 2.2.3 和 sonata admin。

我想要一个自定义字段来显示来自特定组的用户。

我还没有找到如何与 Sonata User 实体和 Sonata Group 实体建立关系。

学说模式创建 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(),它返回了一个查询生成器......

不知道 ?

4

1 回答 1

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。

于 2013-07-17T15:02:53.657 回答