Entityを使わないパターン
ResultSetMapping フィールドとマッピングするプロパティを指定するときaddScalarResultを使う
$em = $this->getDoctrine()->getEntityManager();
$rsm = new ResultSetMapping();
$rsm->addScalarResult('id', 'id');
$rsm->addScalarResult('name', 'name');
$rsm->addScalarResult('count', 'cnt');
$query = $em->createNativeQuery('
SELECT
o.id
,name
,(SELECT count(true) FROM table_two t WHERE t.id = o.id ) AS count
FROM table_one o LIMIT ? OFFSET ?', $rsm);
$query->setParameter(1, $limit);
$query->setParameter(2, $offset);
$result = $query->getArrayResult();
Entityを使うパターン
ResultSetMapping addEntityResultでエンティティーを指定してあげてフィールドとマッピングするプロパティを指定するときaddFieldResultを使う。上記のようにEntityにないフィールはマッピングすることができない。
$em = $this->getDoctrine()->getEntityManager();
$rsm = new ResultSetMapping();
$rsm->addEntityResult('Acme\HelloBundle\Entity\Post', 'r');
$rsm->addFieldResult('r', 'id', 'id');
$rsm->addFieldResult('r', 'name', 'name');
$query = $em->createNativeQuery('
SELECT
o.id
,name
,(SELECT count(true) FROM table_two t WHERE t.id = o.id ) AS count
FROM table_one o LIMIT ? OFFSET ?', $rsm);
$query->setParameter(1, $limit);
$query->setParameter(2, $offset);
$result = $query->getArrayResult();