1

这是我的查询:

公共函数 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 到查询?

4

2 回答 2

3

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

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

$this->em->createQueryBuilder()
    ...
    ->orderBy('u.' . $sortBy, $sortDir)
于 2011-07-22T15:44:43.113 回答
1

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

$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 不支持这种结构。

于 2014-07-30T10:25:25.833 回答