示例#1
0
 /**
  * Get a deep application query builder
  * @param \Jazzee\Interfaces\Display $display
  * 
  * @return \Doctrine\ORM\QueryBuilder
  */
 protected function deepApplicantQuery(\Jazzee\Interfaces\Display $display)
 {
     $queryBuilder = $this->_em->createQueryBuilder();
     $queryBuilder->from('Jazzee\\Entity\\Applicant', 'applicant');
     $queryBuilder->add('select', 'applicant, attachments, decision, tags, answers, element_answers, publicStatus, privateStatus, payment, answer_greScore, answer_toeflScore, answer_school, children, answer_attachment, children_element_answers, children_publicStatus, children_privateStatus, children_payment, children_attachment, children2, children_element_answers2, children_publicStatus2, children_privateStatus2, children_payment2, children_attachment2');
     $expression = $queryBuilder->expr()->orX();
     //this one is the default - if there are no pages in the display then this
     //expression is the only one that will load and no pages will be loaded
     $expression->add($queryBuilder->expr()->eq("answers.page", ":nothing"));
     $queryBuilder->setParameter('nothing', 'nothing');
     foreach ($display->getPageIds() as $key => $pageId) {
         $paramKey = 'displayPage' . $key;
         $expression->add($queryBuilder->expr()->eq("answers.page", ":{$paramKey}"));
         $queryBuilder->setParameter($paramKey, $pageId);
     }
     $queryBuilder->leftJoin('applicant.answers', 'answers', 'WITH', $expression);
     $expression = $queryBuilder->expr()->orX();
     //this one is the default - if there are no elements in the display then this
     //expression is the only one that will load and no elements will be loaded
     $expression->add($queryBuilder->expr()->eq("element_answers.element", ":nothing"));
     $queryBuilder->setParameter('nothing', 'nothing');
     foreach ($display->getElementIds() as $key => $elementId) {
         $paramKey = 'displayElement' . $key;
         $expression->add($queryBuilder->expr()->eq("element_answers.element", ":{$paramKey}"));
         $queryBuilder->setParameter($paramKey, $elementId);
     }
     $queryBuilder->leftJoin('answers.elements', 'element_answers', 'WITH', $expression);
     $queryBuilder->leftJoin('answers.publicStatus', 'publicStatus');
     $queryBuilder->leftJoin('answers.privateStatus', 'privateStatus');
     $queryBuilder->leftJoin('applicant.attachments', 'attachments');
     $queryBuilder->leftJoin('applicant.decision', 'decision');
     $queryBuilder->leftJoin('applicant.tags', 'tags');
     $queryBuilder->leftJoin('answers.payment', 'payment');
     $queryBuilder->leftJoin('answers.children', 'children');
     $queryBuilder->leftJoin('answers.attachment', 'answer_attachment');
     $queryBuilder->leftJoin('answers.greScore', 'answer_greScore');
     $queryBuilder->leftJoin('answers.toeflScore', 'answer_toeflScore');
     $queryBuilder->leftJoin('answers.school', 'answer_school');
     $queryBuilder->leftJoin('children.elements', 'children_element_answers');
     $queryBuilder->leftJoin('children.publicStatus', 'children_publicStatus');
     $queryBuilder->leftJoin('children.privateStatus', 'children_privateStatus');
     $queryBuilder->leftJoin('children.payment', 'children_payment');
     $queryBuilder->leftJoin('children.attachment', 'children_attachment');
     $queryBuilder->leftJoin('children.children', 'children2');
     $queryBuilder->leftJoin('children2.elements', 'children_element_answers2');
     $queryBuilder->leftJoin('children2.publicStatus', 'children_publicStatus2');
     $queryBuilder->leftJoin('children2.privateStatus', 'children_privateStatus2');
     $queryBuilder->leftJoin('children2.payment', 'children_payment2');
     $queryBuilder->leftJoin('children2.attachment', 'children_attachment2');
     $queryBuilder->where('answers.parent IS NULL');
     return $queryBuilder;
 }