2

我正在處理Symfony2項目(Doctrine),我想從ResultSetMapping對象中獲取一個簡單的關聯數組。如何從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但沒有成功!

有什麼想法? 謝謝!

回答

6

你的問題有不必要的複雜查詢,需要注意你的問題。但這裏是你基本上需要:

$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不是唯一的,你將失去一些重複索引的結果。