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