2016-10-03 49 views
0

我試着做一個SELECT d.user AS user類型的查詢。但這部分似乎不允許在教義中。Doctrine SELECT d.user AS user not allowed?

我試圖得到一個不錯的數組如下:

array(
    'week' => 39 
    'year' => 2016 
    'user' => UserObject{} 

我有以下DQL:

$qb = $this->createQueryBuilder('d') 
     ->select("d.user AS user, WEEK(d.date, 3) AS week, DATE_FORMAT(d.date, '%x') AS year") 
     ->join('d.user', 'u') 
     ->orderBy('d.date', 'ASC') 
     ->getQuery(); 

    return $qb->getResult(); 

當然,我可以做一個select("d, etc但是我想直接讓用戶作爲返回數組中的一個鍵。

我與上面的代碼得到的錯誤是: [Semantical Error] line 0, col 9 near 'user AS user,': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

我已經加入加入,但似乎沒有幫助。

+0

我認爲你在錯誤的一面考慮問題。如果你想檢索一個用戶,你的查詢不應該在用戶實體上,並且你的查詢不應該在另一個實體上加入你的條件?另一個主要原因是'user'是許多SGBD中的保留關鍵字(不知道您使用的是哪一個),您可能需要更改別名或將其放在'quotes之間。 – Boulzy

+0

@Boulzy,謝謝你的回覆!我已經改變了別名,但這沒有幫助。我帶這個問題的原因是我*可以*做一個' - > select('d,...)'這樣我也有用戶。我只想直接選擇用戶,以便數據數組與我想要的一樣。 – DelphiLynx

回答

1

我不確定它會給你完全你想要的結果(也許你將不得不嘗試Doctrine\ORM\Query::HYDRATE_ARRAY hydrator),但可以這樣做的伎倆?

$qb = $this->createQueryBuilder('d') 
      ->select("user, WEEK(d.date, 3) AS week, DATE_FORMAT(d.date, '%x') AS year") 
      ->leftJoin('d.user', 'user') 
      ->orderBy('d.date', 'ASC') 
      ->getQuery(); 

return $qb->getResult();