两个连接和一个位置 - 原则2


Two joins and a where - Doctrine2

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

知道吗?

你应该使用绑定参数,而不是直接将"$ced"放入where语句中。将您的 where 语句更改为以下内容:

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

否则,不仅生成的 {D/S}QL 将变为无效,而且您也容易受到注入攻击。

嗯,

如果错误仍然存在,您可以按照原则 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;

我真的很愚蠢。

解决方案是:

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

谢谢大家的回答。