【问题标题】:Two joins and a where - Doctrine2两个连接和一个 where - Doctrine2
【发布时间】:2012-06-26 00:37:07
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: php doctrine-orm dql


    【解决方案1】:

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

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

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

    【讨论】:

    • 也不工作。得到:Invalid parameter number: number of bound variables does not match number of tokens.
    • 这是正确的做法。您是否有需要绑定的幻像参数?您可能应该调用 getDQL() 并查看完整的查询是什么。
    【解决方案2】:

    嗯,如果错误仍然存​​在,您可以按照教义 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;
    

    【讨论】:

    【解决方案3】:

    我真的很笨。

    解决办法是:

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

    谢谢大家的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2019-08-23
      • 2023-04-09
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2015-07-19
      相关资源
      最近更新 更多