Symfony 多人计数大于的条令查询生成器

Symfony 多人计数大于的条令查询生成器,symfony,doctrine-orm,doctrine,many-to-many,doctrine-query,Symfony,Doctrine Orm,Doctrine,Many To Many,Doctrine Query,我使用的是条令查询生成器,有一个非常具体的要求 我正在实体中使用ManyToMany字段,该字段与用户帐户实体的用户实体关联数组相关 /** * @var ArrayCollection * * @ORM\ManyToMany(targetEntity="User", cascade={"persist"}) * @ORM\JoinTable(name="post_user_list") */ protected $userList; 在显示公共帖子的要求中,要求实体的已发布布尔值设

我使用的是条令查询生成器,有一个非常具体的要求

我正在实体中使用ManyToMany字段,该字段与用户帐户实体的用户实体关联数组相关

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="User", cascade={"persist"})
 * @ORM\JoinTable(name="post_user_list")
 */
protected $userList;
在显示公共帖子的要求中,要求实体的已发布布尔值设置为true,发布日期小于当前日期,以及两个与实体关联的用户

在我的查询生成器中,我设置了以下内容:

$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select($select)->from($this->getEntityName(), 'p');
$criteria = $qb->expr()->andX();
$criteria->add($qb->expr()->eq('p.editor_published', 1))
         ->add($qb->expr()->lte('p.datePublished', ':now'));
这只处理前两个需求,现在我需要一个计算userList中用户实体数量的标准条目,以及专门针对大于或等于两个用户的where子句

不确定要从何处继续..

试试这个。该查询使用仅显示与2个或更多用户关联的实体

$qb->select($select)
    ->from($this->getEntityName(), 'p')
    ->innerJoin('p.userList','u')
    ->where('p.editor_published = 1')
    ->andWhere('p.datePublished <= :now')
    ->groupBy($select) //not sure what's in $select may need to change this
    ->having('count(u.id) > 1'); //assuming user has an id column otherwise change it
    ->setParameter('now',new \DateTime());

你好谢谢你的回答!当我开始工作时,我会试一试。这听起来让我难以置信的愚蠢,但我特别使用了多人主义关系来避免写任何类型的连接之类的东西。不幸的是,这是我唯一的道路吗?另外,我之所以使用andX,是因为这个特定的存储库方法有很多复杂的上下文重载子句构建在它的基础上,而且管理andWhere或where等的内容和位置变得很麻烦。我只是想,条令标准条款足够强大,能够做到这一点。如果你想避免加入,你可以通过子查询获得计数,即“SELECT COUNTu.id FROM MyNameSpace\User u WHERE u MEMBER OF p.ul>1”好的,所以我一定要用某种“经典”的mysql方法来处理这个问题。老实说,这太糟糕了,哈哈,这么多的自动魔法正在进行,很难不希望有一个更管理的解决方案。我给他们打一针,谢谢!希望得到类似于:$criteria->add$qb->expr->gte$qb->expr->count'p.userList'的东西,2您在回答中的原始解决方案实际上效果相当不错。出于某种原因,这种方式仍然令人失望,但效果是完美的。非常感谢你: