【问题标题】:doctrine 2 querybuilder with set parameters not working具有设置参数的学说 2 查询生成器不起作用
【发布时间】:2011-10-10 04:21:48
【问题描述】:

这是我的查询:

公共函数getDetails($userid, $orderby, $sort){

$query = $this->_em->createQueryBuilder()
                ->select('u')
                ->from('\Entities\Users', 'u')
                ->where('u.userid= ?1')
                ->orderBy('u.?3', '?3')
                ->setParameter(1, $userid)
                ->setParameter(2, $orderby)
                ->setParameter(3, $sort)
                ->getQuery()
                ->getResult();

}

它一直出错:消息:[Semantical Error] line 0, col 83 near '?3 DESC': Error: '?3' is not defined。

如何从该函数的属性中获取 orderby 到查询?

【问题讨论】:

    标签: doctrine doctrine-orm query-builder


    【解决方案1】:

    您不能将占位符用于 DQL 查询的动态构建。您必须自己编写代码:

    $sortBy = in_array($sortBy, array(...)) ? $sortBy : 'id';
    $sortDir = $sortDir == 'ASC' ? 'ASC' : 'DESC';
    
    $this->em->createQueryBuilder()
        ...
        ->orderBy('u.' . $sortBy, $sortDir)
    

    【讨论】:

    • 教义有很多痛苦的缺点。它缓慢、复杂,但非常有限。很难看出这比直接的 php/sql 存储过程更好。
    【解决方案2】:

    你不能将参数绑定到 QueryBuilder,只能绑定到 Query,所以只需交换行,首先从 builder 中获取查询,然后用参数填充它并获取结果。

    $query = $this->_em->createQueryBuilder()
                ->select('u')
                ->from('\Entities\Users', 'u')
                ->where('u.userid= ?1')
                ->orderBy('u.?3', '?3')
                ->orderBy('u.'.$orderBy, $sort)
                ->getQuery()
                ->setParameter(1, $userid)
                ->getResult();
    
    }
    

    在学说 2.4 中它是固定的,您可以将参数绑定到 QueryBuilder。

    更新:我错过了在字段名称中使用占位符的时刻,SQL 不支持这种结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2011-11-15
      • 2011-12-04
      • 2012-12-07
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      相关资源
      最近更新 更多