У меня есть 5 сущностей:
- принадлежность
- Человек
- Пользователь
- Принадлежность пользователя
- ЛицоПринадлежность
Моя цель — отобразить список полей выбора, где я могу выбрать все UserAffiliations, которых нет в PersonAffiliations.
Моя идея состоит в том, чтобы создать общедоступную функцию в UserAffiliationRepository, которая будет возвращать только те связи для конкретного пользователя, которые не заданы для конкретного человека.
Для этого я использую:
class UserAffiliationRepository extends EntityRepository
{
public function getUnselectedAffiliations( $user_id = null, $person_id = null )
{
$commQB = $this->createQueryBuilder( 'ua' )
->select('ua');
$commQB->where("ua.user_id = {$user_id}");
$commQB->andWhere( "ua.affiliation_id not in ( select pa.affiliation_id FROM SciForumVersion2Bundle:PersonAffiliation pa where pa.person_id = 3077 )" );
return $commQB->getQuery()->getResult();
}
}
И это прекрасно работает.
Теперь я хотел бы использовать этот результат в FormBuilder. Для этого в моем контроллере я использую:
$affiliations = $em->getRepository('SciForumVersion2Bundle:UserAffiliation')->getUnselectedAffiliations($user->getId(), $author->getId())
$enquiry = new PersonAffiliation();
$formType = new SubmissionAffiliationAddFormType($user, $affiliations);
$form = $this->createForm($formType, $enquiry);
И затем в классе Form я использую:
$builder->add('affiliation', 'entity', array(
'class' => 'SciForumVersion2Bundle:UserAffiliation',
'multiple' => true));
Но здесь я получаю все связи для конкретного пользователя, а не только те, которых еще нет в сущности PersonAffiliations.
Любая помощь? Спасибо.