0

私はsymfony 2.2.3とsonata adminをdev-masterで使用しています。

特定のグループのユーザーを表示するカスタム フィールドが必要です。

Sonata User エンティティと Sonata Group エンティティとの関係を作成する方法が見つかりません。

doctrine スキーマは 3 つのテーブルを作成します: fos_user_user、fos_user_group、および関係テーブル fos_user_user_group です。

私は管理者クラスにそのようなフィールドを持つフォームを持っています:

->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 が正しくないため、クエリが機能しないことはわかっています。

ユーザー エンティティとグループ エンティティは、BaseUser と GroupUser を ID で拡張するだけです。

誰かが正しいクエリを知っていますか?

ありがとうございました。

編集 :

わかりましたクエリの解決策を見つけました:

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