2014-02-12 2 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 

내 REPO됩니다 :

이 오류가

$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

i18n의 경우 jms/i18n-routing-bundle과 쌍으로 Translatable doctrine 확장을 사용하는 것이 좋습니다. – 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