du59131 2016-01-29 02:27
浏览 34
已采纳

如何从Doctrine和Symfony获得汇总标量结果?

How do I get Person, Application, Scalar A as a result set?

I am currently getting an array with [0] => Person [1] => Application etc. The 'addScalarResult()' call seems to be getting ignored.

public function exportHR63Status(Semester $semester) {
  $resultSetMapping = new ResultSetMappingBuilder($this->getEntityManager());
  $resultSetMapping->addRootEntityFromClassMetadata('Unsw\CamsBundle\Entity\Person', 'p');
  $resultSetMapping->addRootEntityFromClassMetadata('Unsw\CamsBundle\Entity\Application', 'a',
  array(
    'id' => 'application_id',
    'deleted' => 'application_deleted',
    'created' => 'application_created',
    'updated' => 'application_updated'
  ));

  $selectClause = $resultSetMapping->generateSelectClause();

  $resultSetMapping->addScalarResult('signedCasual', 'signedCasual');
  $resultSetMapping->addScalarResult('signedFinance', 'signedFinance');
  $resultSetMapping->addScalarResult('signedHeadOfSchool', 'signedHeadOfSchool');

  $q = $this->getEntityManager()->createNativeQuery("SELECT " . $selectClause . ",
    EXISTS (select 1 from hr63signer_hr63submission hshs INNER JOIN hr63signer hs ON hshs.hr63signer_id = hs.id WHERE h1_.id = hshs.hr63submission_id and hs.signertype = 'casual') as signedCasual,
    EXISTS (select 1 from hr63signer_hr63submission hshs INNER JOIN hr63signer hs ON hshs.hr63signer_id = hs.id WHERE h1_.id = hshs.hr63submission_id and hs.signertype = 'finance') as signedFinance,
    EXISTS (select 1 from hr63signer_hr63submission hshs INNER JOIN hr63signer hs ON hshs.hr63signer_id = hs.id WHERE h1_.id = hshs.hr63submission_id and hs.signertype = 'headofschool') as signedHeadOfSchool
    -- processed finance is hr63_submission.processed_finance
    FROM hr63_submission h1_
    INNER JOIN course c2_ ON h1_.course_id = c2_.id
    INNER JOIN application_courses ac ON c2_.id = ac.course_id
    INNER JOIN application a ON ac.application_id = a.id
    INNER JOIN person p ON h1_.person_id = p.znumber
    WHERE c2_.semester_id = 14 -- either course or application should give the same result", $resultSetMapping);

  $q->setParameter('semester_id', $semester->getId());

  return $q->getResult();
}

Symfony 2.7.6, Doctrine 2.5.1

  • 写回答

1条回答 默认 最新

  • dongyan9838 2016-01-29 04:57
    关注

    The answer is that I had the parameter for semester_id hard coded to 14 and bound a parameter that did not match. Change

    c2_.semester_id = 14
    

    to

    c2_.semester_id = :semester_id
    

    Gives:

    [0] Person
    [1] Application plus scalar entries.
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作