我正在研究一个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但没有成功!

任何想法 ?
谢谢 !

最佳答案

您的问题的查询不必要地复杂,引起了您的问题的注意。但是,这基本上是您需要的:

    $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


如果需要的话,请告诉我。如果是,请接受我的回答。

附言请注意,如果unique_name并非唯一,那么您将丢失一些具有重复索引的结果。

10-07 15:49