我有一个类似这样的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'
])基本上,这个实体(称为要约)可以有一些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?
发布于 2018-10-04 14:31:11
在没有经过测试的情况下,我认为你看起来是这样的:
return $this->createQueryBuilder('u')
->leftJoin('App\Entity\Offer', 'of', 'WITH', 'of.id = :offer_id')
->where('u.isActive = 1')
->orWhere('of.id IS NOT NULL')
->setParameter(':offer_id', $options['offer_id'])
->orderBy('u.username', 'ASC');基本的问题是,您没有加入优惠表。
https://stackoverflow.com/questions/52648368
复制相似问题