Doctrine OrWhere声明原则1

Doctrine OrWhere声明原则1,doctrine,Doctrine,使用单个andWhere语句解决了该问题 $query->andWhere("(SELECT COUNT(*) as result FROM EvaluateurCandidature ec4 WHERE ec.candidature_id_ca = ec4.candidature_id_ca AND ec4.role_evaluateur = 'rapporteur' AND ec4.statut_evaluation = ? OR ec.candidature_id_ca = ec4.

使用单个andWhere语句解决了该问题

$query->andWhere("(SELECT COUNT(*) as result FROM EvaluateurCandidature ec4 WHERE ec.candidature_id_ca = ec4.candidature_id_ca AND ec4.role_evaluateur = 'rapporteur' AND ec4.statut_evaluation = ? OR ec.candidature_id_ca = ec4.candidature_id_ca AND ec4.role_evaluateur = 'rapporteur' AND ec4.statut_evaluation = ? ) >= '2'" , array('en cours' , 'terminée'));
我尝试在查询中使用OrWhere语句,但在执行此操作时,返回的对象不依赖于c.id\u ap

有人知道我如何用orWhere在一行中实现查询吗?我试过了,但没有成功

$query->AND WHERE选择COUNT*作为评估条件ec2的结果,其中ec.candidate\u id\u ca=ec2.candidate\u id\u ca和ec2.role\u evaluateur='evaluateur'和ec2.statute\u evaluation='en cours'或ec2.statute\u evaluation='termée'>='2'

我只需要检查ec2中是否有两个以上的结果。statut_evaluation='en cours'或'termée'

下面是实际查询:

$query = Doctrine_Query::create()
            ->from('Candidature c')
            ->leftJoin('c.EvaluateurCandidature ec')
            ->where('c.id_stca = 5');

 $query->andWhere('c.id_ap=?', array($this->id_ap));

      $query->andWhere("(SELECT COUNT(*) as result FROM EvaluateurCandidature ec2 WHERE ec.candidature_id_ca = ec2.candidature_id_ca AND ec2.role_evaluateur = 'evaluateur' AND ec2.statut_evaluation = 'en cours') >= '2'");

      $query->orWhere("(SELECT COUNT(*) as result FROM EvaluateurCandidature ec3 WHERE ec.candidature_id_ca = ec3.candidature_id_ca AND ec3.role_evaluateur = 'evaluateur' AND ec3.statut_evaluation = 'terminée') >= '2'");

对于您的问题,您需要将OR条件分组以避免此类问题,这是因为运算符优先,并且在OR之前绑定,因此您的查询的计算结果为

c.id_stca = some AND  (SELECT ...) >= 2 OR (SELECT ...) >= 2
应将其分组为

c.id_stca = some AND ( (SELECT ...) >= 2 OR (SELECT ...) >= 2 )
对于原则1,我想n查询生成器您可以将其编写为

$query = Doctrine_Query::create()
            ->from('Candidature c')
            ->leftJoin('c.EvaluateurCandidature ec')
            ->where('c.id_stca = 5')
            ->andWhere('c.id_ap=?', array($this->id_ap))
            ->andWhere( 
                $query->expr()->orX(
                    $query->andWhere("(SELECT COUNT(*) as result 
                                       FROM EvaluateurCandidature ec2 
                                       WHERE ec.candidature_id_ca = ec2.candidature_id_ca 
                                       AND ec2.role_evaluateur = 'evaluateur' 
                                       AND ec2.statut_evaluation = 'en cours') >= '2'"),
                    $query->andWhere("(SELECT COUNT(*) as result 
                                       FROM EvaluateurCandidature ec3 
                                       WHERE ec.candidature_id_ca = ec3.candidature_id_ca 
                                       AND ec3.role_evaluateur = 'evaluateur' 
                                       AND ec3.statut_evaluation = 'terminée') >= '2'")
                )
            );