我正在此異常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