【问题标题】:How to get an aggregate scalar result from Doctrine and Symfony?如何从 Doctrine 和 Symfony 获得聚合标量结果?
【发布时间】:2016-01-29 02:27:27
【问题描述】:

如何获取 Person、Application、Scalar A 作为结果集?

我目前正在获取一个包含 [0] => Person [1] => Application 等的数组。“addScalarResult()”调用似乎被忽略了。

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

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    答案是我将term_id 的参数硬编码为14,并绑定了一个不匹配的参数。改变

    c2_.semester_id = 14
    

    c2_.semester_id = :semester_id
    

    给:

    [0] Person
    [1] Application plus scalar entries.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2019-03-24
      • 2016-04-08
      相关资源
      最近更新 更多