教义子查询语法

时间:2018-06-20 07:44:10

标签: doctrine

我需要使用SQL复制查询中的AND语句

  

AND(((从evaluateur_candidature e2中选择e2.candidature_id_ca   e.candidature_id_ca = e2.candidature_id_ca AND e2.role_evaluateur =   'evaluateur')是NULL)

用我尝试过的学说来复制它很容易:

    $query->andWhere('(SELECT e2.candidature_id_ca FROM evaluateur_candidature e2 WHERE
e.candidature_id_ca = e2.candidature_id_ca AND  e2.role_evaluateur = ?)' , 'evaluateur' , 'IS NULL ');

但是我得到

  

找不到类e2

有人知道我该怎么做?预先感谢

在此处更新完整的学说查询:

    $query = Doctrine_Query::create()
                    ->from('Candidature c')
                    ->innerJoin('c.RoleActeur ra_cand ON c.id_ca = ra_cand.id_ca AND ra_cand.id_role = 4')
                    ->innerJoin('ra_cand.Acteur ac_cand')
                    ->innerJoin('c.CandidatureActeur ca ON c.id_ca = ca.id_ca')
                    ->where('c.id_stca = 5');

    $query->leftJoin('c.EvaluateurCandidature ec');

    //here i would like to get the "Candidature collection" who not have records in the table EvaluateurCandidature when the column role_evaluateur is set to  "evaluation". 


    //$query->andWhere('ec.role_evaluateur = ? ) ? )', 'evaluateur' ,'IS NULL ');
  $query->andWhere('(SELECT e2.candidature_id_ca FROM evaluateur_candidature e2 WHERE
e.candidature_id_ca = e2.candidature_id_ca AND  e2.role_evaluateur = ?)' , 'evaluateur' , 'IS NULL ');

1 个答案:

答案 0 :(得分:1)

根据您的描述,您可以在连接EvaluateurCandidature上包含另一个条件,以仅将role_evaluateur设置为“ evaluation”的记录联接,然后仅选择EvaluateurCandidature的id为空的记录

$query = Doctrine_Query::create()
                ->from('Candidature c')
                ->innerJoin('c.RoleActeur ra_cand ON c.id_ca = ra_cand.id_ca AND ra_cand.id_role = 4')
                ->innerJoin('ra_cand.Acteur ac_cand')
                ->innerJoin('c.CandidatureActeur ca ON c.id_ca = ca.id_ca')
                ->leftJoin("c.EvaluateurCandidature ec WITH ec.role_evaluateur = 'evaluation'")
                ->where('c.id_stca = 5')
                ->andWhere('ec.id IS NULL');

WITH keyword