Как получить группу от пользователя в SonataUserBundle?

Я использую symfony 2.2.3 и администратор сонаты в dev-master.

Я хотел бы, чтобы пользовательское поле отображало пользователей из определенной группы.

Я не нашел, как установить связь с объектом Sonata User и объектом Sonata Group.

Схема доктрины создает 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();
                                },
                            ))

И моя функция getCoachs() в UserRepository:

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 с идентификатором.

Кто-то знает правильный запрос?

Спасибо.

РЕДАКТИРОВАТЬ :

Хорошо, я нашел решение для запроса:

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(), которая возвращает построитель запросов...

Без понятия ?


person Perroin Thibault    schedule 17.07.2013    source источник


Ответы (1)


Хорошо, я нашел решение!

Мой запрос:

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.

person Perroin Thibault    schedule 17.07.2013