原则2设置参数的querybuilder不起作用



这是我的查询:

getDetails($userid, $orderby, $sort){

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

一直出错:Message: [semantic Error] line 0, col 83 near '?3 DESC':错误:'?3'没有定义。

我如何从该函数中的属性到查询的顺序?

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

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

您不能将参数绑定到QueryBuilder,只能绑定到Query,因此只需交换行,首先从生成器中获取Query,然后填充参数并获得结果。

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

在doctrine 2.4中是固定的,你可以绑定参数到QueryBuilder。

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

最新更新