我想创建一个多语言网站,为此我将Symfony与PrezentBundle
和A2lixBundle
一起使用。我会通过实体仓库获取我的数据列表。
我有这个错误:
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 :(得分:4)
您的问题可能是因为误用了setParameters()
mehtod。 doctrine查询构建器有两种类似的方法:
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()
。