2011-11-10 73 views
0

我有以下代碼拋出異常Invalid parameter number: number of bound variables does not match number of tokens。然而,當我打印註冊的參數時,我的參數顯示出來了。Doctrine查詢生成器不註冊參數?

public function getUnitPriceFor($entityType,$entityID,$qty,$configuration_id) 
{ 
    $this->qb = $this->getEntityManager()->createQueryBuilder(); 
    $this->qb ->select($this->_entities[$entityType]['select']) 
       // for Base this would be ->select(array('t','c','w','g')) 
       // for the other cases below, like website, it's array('t','w') 
       ->from('AcmeBundle:PriceTier', 't'); 

    switch($entityType) : 
     case 'base' : 
      $this->qb ->leftJoin('t.customers','c') 
         ->leftJoin('t.customergroups','g') 
         ->leftJoin('t.websites','w'); 
     break; 
     case 'website' : 
      $this->qb ->join('t.websites','w','WITH','w.id = '.$entityID); 
     break; 
     case 'custgrp' : 
      $this->qb ->join('t.customergroups','g','WITH','g.id = '.$entityID); 
     break; 
     case 'cust' : 
      $this->qb ->join('t.customers','t','WITH','t.id = '.$entityID); 
     break; 
    endswitch; 

    $this->qb   ->where('t.printconfiguration = :configuration_id'); 
    $this->qb   ->setParameter('configuration_id', $configuration_id); 

    print_r($this->qb->getParameters()); 

    $dql = $this->qb->getDQL(); 

    echo"<pre>"; 
    print_r($this->getEntityManager()->createQuery($dql)->getArrayResult()); 
    echo"</pre>"; 
} 

印刷$this->qb->getParameters();顯示我Array ([configuration_id] => 1),除去我的地方,並設置參數條款防止異常發生。最後,(並得到這個),如果我刪除我的where子句,但保持參數設置,沒有發生異常。我很困惑。

+0

異常是否發生與每個 '案件' 或僅特定的一個(或多個)?此外,你有沒有嘗試直接傳遞$ configuration_id到你的WHERE子句而不是使用setParameter()? – cantera

+0

啊,其他情況下,由於select語句會引發語義錯誤 - 我已經糾正了這種情況,是的,在任何情況下都是例外。我試過'where('t.printconfiguration =:configuration_id') - > setParameter('configuration_id',$ configuration_id);'並且仍然發生同樣的異常。我可以像在'case'語句中那樣直接傳遞它,但是這幾乎違背了使用PDO的目的...... – Nick

+0

很高興你找到了答案。你能否解釋你的意思是「打敗了使用PDO的目的?」我並不反對 - 我只是直接傳遞參數來保存一些代碼,並且很好奇我是否有理由不這樣做。如果聊天更容易,歡迎在聊天中討論。 – cantera

回答

1

顯然$dql = $this->qb->getDQL();不會傳遞參數。

我需要改變

$dql = $this->qb->getDQL(); 

echo"<pre>"; 
print_r($this->getEntityManager()->createQuery($dql)->getArrayResult()); 
echo"</pre>"; 

$query = $this->qb->getQuery(); 

echo"<pre>"; 
print_r($query->getArrayResult()); 
echo"</pre>"; 
相關問題