Php 两个连接和一个where-Doctrine2

Php 两个连接和一个where-Doctrine2,php,doctrine-orm,dql,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)

我在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


有什么想法吗?

Hmm如果错误仍然存在,您可以按照条令2.1文档中所述的方法进行尝试:

$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;

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

 $dql->where('u.ced = :ced')->setParameter('ced', $ced);
否则,不仅生成的{D/S}QL将变得无效,而且您很容易受到注入攻击。

我真的很愚蠢

解决办法是:

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

谢谢你们的回答

您是否尝试过使用EchoSQLLogger打印查询?也不行。获取:
无效参数编号:绑定变量的数量与令牌的数量不匹配。
这是正确的方法。您是否有需要绑定的幻影参数?您可能应该调用getDQL()并查看完整查询是什么。