У меня есть класс типа формы Symfony, подобный этому:
$builder->add('blockedUsers', EntityType::class, [
'class' => User::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->where('u.isActive=1')
// error:
->orWhere('u.id IN (SELECT user_id FROM offer_blockedusers WHERE offer_id=:offer_id)')
->setParameter(':offer_id', $options['offer_id'])
->orderBy('u.username', 'ASC');
},
'label' => 'Blocked users',
'required' => false,
'multiple' => true,
'choice_label' => 'username'
])
По сути, эта сущность (называемая Предложение) может иметь несколько заблокированных пользователей:
/**
* @ORM\ManyToMany(targetEntity="User")
* @ORM\JoinTable(
* name="offer_blockedusers",
* joinColumns={
* @ORM\JoinColumn(name="offer_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
* }
* )
*/
private $blockedUsers;
И администратор может разрешить /заблокировать предложение для некоторых пользователей:
В этом раскрывающемся списке я хочу показать только активных пользователей, плюс пользователейкоторые уже заблокированы для этого предложения.(потому что пользователь может стать неактивным, если он не входит в систему в течение длительного времени, но он должен продолжать блокироваться)
Моя попытка выше не работает, потому что я получаю
Класс 'offer_blockedusers' не определен.
Поскольку это не сущность, а таблица соединения.
Могу ли я сделать это с помощью DQL или мне нужно перейти на собственный SQL