【问题标题】:How to get an associative array from a ResultSetMapping?如何从 ResultSetMapping 中获取关联数组?
【发布时间】:2013-06-01 05:55:29
【问题描述】:

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

有什么想法吗? 谢谢!

【问题讨论】:

    标签: symfony doctrine associative-array entitymanager sqlresultsetmapping


    【解决方案1】:

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

        $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 不是真正唯一的,您将丢失一些具有重复索引的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2019-09-03
      相关资源
      最近更新 更多