【发布时间】:2018-10-04 13:45:54
【问题描述】:
我有一个像这样的 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'
])
基本上,这个实体(称为Offer)可以有一些blockedUsers:
/**
* @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?
【问题讨论】:
标签: symfony doctrine symfony4 doctrine-query