我正在研究一个Symfony2项目(Doctrine),我想从ResultSetMapping对象中获取一个简单的关联数组。
这是我的要求:
$rsm = new ResultSetMapping;
//$rsm->addIndexByScalar('name');
$rsm->addScalarResult('name', 'name');
$rsm->addScalarResult('rate', 'rate');
return $this->_em->createNativeQuery(sprintf('
SELECT DISTINCT t1.sold_drug as name, (COUNT(*)/(SELECT COUNT(*) FROM Transaction t WHERE t.sold_drug != ""))*100 as rate
FROM Transaction t1
WHERE t1.sold_drug != "" AND t1.prescribed_but_not_sold != "No"
GROUP BY name
ORDER BY rate DESC', $this->getFilterQuery()), $rsm)->getResult();
所以我想得到一个关联数组,如:
array('nameA' => 10, 'nameB' => 2, ...);
我尝试添加ScalarResult / ScalarIndex但没有成功!
有什么想法吗? 谢谢!
答案 0 :(得分:7)
您的问题有不必要的复杂查询,引起您的问题的注意。但这是你基本需要的:
$rsm = new ResultSetMapping();
$query = $this->_em->createNativeQuery('SELECT unique_name, price FROM drugs', $rsm);
$rsm->addIndexByScalar('unique_name');
$rsm->addScalarResult('price', 'price');
//more scalars can follow
var_dump($query->getResult());
在这种情况下,你会得到这样的东西:
array (size=4)
'NameA' =>
array (size=1)
'price' => int 10
'NameB' =>
array (size=1)
'price' => int 20
'NameC' =>
array (size=1)
'price' => int 30
'NameD' =>
array (size=1)
'price' => int 40
如果您需要,请告诉我。如果是,请接受我的答案。
P.S。请注意,如果unique_name不是唯一的,那么您将丢失一些具有重复索引的结果。