两个连接和一个在哪里 - Doctrine2

时间:2012-06-26 00:37:08

标签: php doctrine-orm dql

我在Doctrine2中有以下查询。

$dql->select('um', 'u', 'r')
                    ->from('AcmeComBundle:UserMenu', 'um')
                    ->join('um.user', 'u')
                    ->join('u.role', 'r')
                    ->where('u.ced = '.$ced);

总是遇到问题:

[Semantical Error] line 0, col 116 near 'XXXXX': Error: 'XXXXX' is not defined.

XXXXX来自$ced

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

你应该使用绑定参数,而不是直接将“$ ced”放入where语句中。将你的where语句更改为:

 $dql->where('u.ced = :ced')->setParameter('ced', $ced);

否则,生成的{D / S} QL不仅会失效,而且还容易受到注入攻击。

答案 1 :(得分:0)

如果错误仍然存​​在,您可以通过doctrine 2.1 docs中记录的方式尝试:

$em = $this->getEntityManager;
$qb = $em->createQueryBuilder;

$qb->select(array('um', 'u', 'r'))
   ->from('Sdz\BlogBundle\Entity\Article', 'a')
   ->leftJoin('um.user', 'u')
   ->leftJoin('u.role', 'r')
   ->where('u.ced = '.$ced);

$query = $qb->getQuery();
$results = $query->getResult();

return $results;

答案 2 :(得分:0)

我真的很蠢。

解决方案是:

$dql->select('um', 'u', 'r')
                ->from('AcmeComBundle:UserMenu', 'um')
                ->join('um.user', 'u')
                ->join('u.role', 'r')
                ->where("u.ced = '".$ced."'");

谢谢你的回答。