2011-09-27 49 views
2

進出口試圖通過ORDER BY列作爲DQL參數,如下圖所示:主義DQL動態ORDER BY參數

$this->em->createQuery("SELECT t FROM Entities\Topic t ORDER BY :order") 
    ->setParameters(array('order' => 't.name'))->getResult(); 

我想這是行不通的,因爲的setParameter會逃跑:順序,但是下方解決方案似乎不太好:

$order = 't.name'; // Dynamic value 
$this->em->createQuery("SELECT t FROM Entities\Topic t ORDER BY $order") 
    ->getResult(); 

有沒有更好的方法來解決這個問題?

回答

3

在這種情況下使用教義Querybuilder

$order = 't.name'; // Dynamic value 

$qb = $this->_em->createQueryBuilder(); 
$qb->select('t') 
    ->from('Entities\Topic', 't') 
    ->orderBy($order); 
+2

@Dennis對不起,如果這個答案傷害你的感情;)不,嚴重 - 如果有一個動態內置的查詢 - 這就是用於查詢的實際使用情況建設者。但另一方面,我認爲你的解決方案確實沒問題。我不會做可變插值,看起來不太清楚。如果我是你,只需要:' - > createQuery('SELECT t FROM Entities \ Topic t ORDER BY'。$ order)'並且完成它。 – Max

+2

@Max,這是從SQL注入安全嗎?! –

+1

@LucianoMammino不,你應該肯定有一個允許的值的白名單 – Max