2015-01-07 36 views
2

我有以下代碼:如何在Doctrine中獲取值喜歡PDO :: FETCH_COLUMN?

$repository = $this->entitymanager->getRepository('Intlist\Entity\Location'); 
$query = $repository->createQueryBuilder('l') 
    ->select('l.country') 
    ->groupBy('l.country') 
    ->where('l.country != :empty_country') 
    ->setParameter('empty_country', "") 
    ->getQuery(); 

而且我想獲得像[ 'EN', 'FR', 'US' ],像PDO::FETCH_COLUMN將返回。我試圖getScalarResult()但它返回的結果相同getArrayResult()

array (size=2) 
    0 => 
    array (size=1) 
     'country' => string 'DE' (length=2) 
    1 => 
    array (size=1) 
     'country' => string 'MM' (length=2) 

我試圖用​​因爲我看到的一些例子,但它返回的結果相同getArrayResult(),而不是一個PDO聲明。

有什麼想法?

回答

2

您可以從查詢結果中提取值來獲得你想要的數組:

$repository = $this->entitymanager->getRepository('Intlist\Entity\Location'); 
$query = $repository->createQueryBuilder('l') 
    ->select('l.country') 
    ->groupBy('l.country') 
    ->where('l.country != :empty_country') 
    ->setParameter('empty_country', "") 
    ->getScalarResult(); 

$country_codes = array(); 
foreach($query as $result){ 
    $country_codes[] = $result['country']; 
} 

如果你想本地的結果,你可以做一個自定義的水化模式,as explained in Doctrine doc

創建擴展AbstractHydrator類:

namespace MyProject\Hydrators; 

use Doctrine\ORM\Internal\Hydration\AbstractHydrator; 

class ColumnHydrator extends AbstractHydrator 
{ 
    protected function _hydrateAll() 
    { 
     return $this->_stmt->fetchAll(PDO::FETCH_COLUMN); 
    } 
} 

的類添加到ORM配置:

$em->getConfiguration()->addCustomHydrationMode('ColumnHydrator', 'MyProject\Hydrators\ColumnHydrator'); 

然後使用它:

$repository = $this->entitymanager->getRepository('Intlist\Entity\Location'); 
$query = $repository->createQueryBuilder('l') 
    ->select('l.country') 
    ->groupBy('l.country') 
    ->where('l.country != :empty_country') 
    ->setParameter('empty_country', "") 
    ->getQuery(); 
$results = $query->getResult('ColumnHydrator'); 
+0

對不起,我應該說我'尋找一個本地函數,像'PDO :: fetchAll()'與'\ PDO :: FETCH_COLUMN',我不想分析結果。 – olvlvl

+0

@olvlvl你有沒有時間看看我的編輯? – Veve

+0

謝謝@Veve,看起來不錯。太糟糕了,這個水合物沒有與教條包裝在一起。 – olvlvl