首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则查询生成器,包括ManytoMany关系中的元素

原则查询生成器,包括ManytoMany关系中的元素
EN

Stack Overflow用户
提问于 2018-10-04 13:45:54
回答 1查看 67关注 0票数 0

我有一个类似这样的Symfony表单类型类:

代码语言:javascript
复制
$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:

代码语言:javascript
复制
/**
 * @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?

EN

回答 1

Stack Overflow用户

发布于 2018-10-04 14:31:11

在没有经过测试的情况下,我认为你看起来是这样的:

代码语言:javascript
复制
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');

基本的问题是,您没有加入优惠表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52648368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档