Doctrine 条令2设置参数的querybuilder不工作
这是我的疑问: 公共函数getDetails$userid、$orderby、$sort{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('
$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存储过程更好。