Doctrine 条令2设置参数的querybuilder不工作

Doctrine 条令2设置参数的querybuilder不工作,doctrine,doctrine-orm,query-builder,Doctrine,Doctrine Orm,Query Builder,这是我的疑问: 公共函数getDetails$userid、$orderby、$sort{ $query = $this->_em->createQueryBuilder() ->select('u') ->from('\Entities\Users', 'u') ->where('u.userid= ?1') ->orderBy('

这是我的疑问:

公共函数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();

}
它不断出错:消息:[语义错误]第0行,第83列靠近“?3 DESC”:错误:“?3”未定义


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

您不能使用占位符进行DQL查询的动态生成。您必须自己编写代码:

$sortBy = in_array($sortBy, array(...)) ? $sortBy : 'id';
$sortDir = $sortDir == 'ASC' ? 'ASC' : 'DESC';

$this->em->createQueryBuilder()
    ...
    ->orderBy('u.' . $sortBy, $sortDir)

您不能在DQL查询的dinamical生成中使用占位符。您必须自己编写代码:

$sortBy = in_array($sortBy, array(...)) ? $sortBy : 'id';
$sortDir = $sortDir == 'ASC' ? 'ASC' : 'DESC';

$this->em->createQueryBuilder()
    ...
    ->orderBy('u.' . $sortBy, $sortDir)

您不能将参数绑定到QueryBuilder,而只能绑定到查询,所以只需交换行,首先从生成器中获取查询,然后用参数填充查询并获取结果

$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不支持这样的构造。

您不能将参数绑定到QueryBuilder,只能进行查询,所以只需交换行,首先从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不支持这种构造。

条令有很多痛苦的缺点。它速度慢、复杂,但非常有限。很难看出这比直接的php/SQL存储过程有什么好。条令有很多痛苦的缺点。它速度慢、复杂,但很漂亮很难看出这比直接的php/sql存储过程更好。