2014-02-12 31 views
2

我想創建一個多語言網站,爲此我使用Symfony PrezentBundleA2lixBundle。我將通過與實體回購的區域設置獲取我的數據列表。QueryBuilder在非對象上

我有這樣的錯誤:

FatalErrorException: Error: __clone method called on non-object in /project/vendor/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php line 238 

這裏是我的回購:

$qb = $this->createQueryBuilder('c') 
     ->leftJoin('c.criteres', 'crit') 
     ->leftjoin('c.translations', 'ct', 'WITH', 'ct.locale = :locale') 
     ->setParameters('locale', 'fr'); 
var_dump($qb->getDql()); 

return $qb->getQuery() 
     ->getResult(); 

var_dump給我說:

SELECT c FROM NS\MyBundle\Entity\CritereCateg c LEFT JOIN c.criteres crit LEFT JOIN c.translations ct WITH ct.locale = :locale 
+0

我建議你使用可翻譯的教條擴展與jms/i18n-routing-bundle配對使用i18n。 – Hast

+0

我已經使用StofDoctrineExtensionsBundle進行了一些測試,但有了這個我有另一個問題。 ^^ – Kev

+0

我只想說可翻譯是真正經過測試和穩定的擴展,它適用於很多網站......而不是你想要實現的包。 – Hast

回答

4

您的問題可能是因爲誤用setParameters() mehtod。原則查詢生成器有兩種類似的方法:

1)setParameter()其中每個方法用法只設置一個參數。語法是:

// for numeric parameters 
$qb->leftjoin('c.translations', 'ct', 'WITH', 'ct.locale = ?1') 
    ->setParameter(1, 'fr'); 

// for string parameters 
$qb->leftjoin('c.translations', 'ct', 'WITH', 'ct.locale = :locale') 
    ->setParameter('locale', 'fr'); 

2)setParameters()這臺多參數:

// String params 
$qb->where('u.id = :uid') 
    ->leftjoin('c.translations', 'ct', 'WITH', 'ct.locale = :locale') 
    ->setParameters(array('locale' => 'fr', 'uid' => $userId)); 

// Numeric parameters are also available here 
$qb->where('u.id = ?1') 
    ->leftjoin('c.translations', 'ct', 'WITH', 'ct.locale = ?2') 
    ->setParameters(array(2 => 'fr', 1 => $userId)); 

所以,你可能想在你的查詢生成器使用setParameter(),而不是setParameters()

+0

這麼簡單的錯誤......謝謝哈斯! – Kev