我正在此异常DQL查询使用变量:在Select语句返回异常
[语义错误] 0行,列124“附近柱=:列”:错误:“列”没有定义。
当尝试运行这段代码:
/**
* @param User $user
* @param String $column
* @return array
*/
public function getStatsByDQL(User $user, String $column)
{
$midNight = date_create('00:00:00')->format('Y-m-d H:i:s');
$em2 = $this->getDoctrine()->getManager()->getRepository('AppBundle:ExerciseStats')
->createQueryBuilder('g')
->setParameters(array(
'user' => $user, 'column' => $column, 'date' => $midNight,
))
->where('user = :user', 'g.timestamp < :date', 'column =
:column')
->select('g.column')
->setMaxResults(1)
->join('g.user', 'user')
->orderBy('g.column','DESC')
->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
return $em2;
这里的它是如何执行:
$yy = $this->getStatsByDQL($usr, 'bench_press_1_weight');
var_dump($yy);
这DQL查询时, 'g.column' 被 'bench_press_1_weight' 取代运行良好,但当g.column被放置在那里时会出错。我认为'bench_press_1_weight'应该被传递,因为我在参数'column'=> $ column中设置。对我而言,这应该起作用。我还没有找到Doctrine docs有任何用处,并尝试了无数的组合。
此功能在我的默认控制器中。
任何人都有任何线索?提前致谢!
所以你实际上有一个名为列的数据库表列?列是MySQL中的保留字,因此不会很好结束。 – Cerad
其实我没有列名列,如果你看代码,你会看到它是变量名。这是DQL,而不是SQL,所以我在那里安全。为了安全起见,我使用另一个变量名称对它进行了测试,它没有任何区别,同样的确切错误消息。 –
DQL转换为SQL,因此适用相同的限制。 'column =:column'强烈暗示了一个名为column的列,就像错误消息一样。你是否试图动态指定实际列?我想我只是不了解设计。 dump($ qb-> getQuery() - > getSQL()会显示生成的sql。 – Cerad