2017-06-29 41 views
0

我正在研究基於Symfony 2.8的項目,該項目允許user放置order如何在教條中獲得正好一個訂單的用戶數量/數量?

現在我想創建一個Doctrine查詢,返回users的數字,其中只有一個order。我想這將是容易的,但我對這個幾個小時...

  1. 選擇用戶和他們的訂單數
  2. 步驟的結果,選擇與order_count = 1所有用戶1
  3. 應用更多一些通過在步驟2的結果從用戶僅選擇的訂單,並通過添加條件過濾器(例如狀態=完成)

在SQL以下工作正常解決步驟1:

SELECT user_id, COUNT(*) as count FROM order WHERE status = 'completed' GROUP BY user_id 

然而,當我嘗試將此轉化爲Doctrine我得到以下錯誤:

$qb->select('o_inner.user, COUNT(*) as count') 
    ->from('MyBundle:Order', 'o_inner') 
    ->where('o_inner.status = :status') 
    ->groupBy('o_inner.user') 
    ->setParameter('status', 'completed'); 

[Doctrine\ORM\Query\QueryException]        
[Syntax Error] line 0, col 30: Error: Expected Literal, got '*' 

所以我甚至無法解決的第一步。任何想法如何做到這一點?

編輯:

做了一些更多的實驗不同的選擇:

$qb->select('o_inner.user, COUNT(o_inner.user) as count') 
$qb->select('COUNT(o_inner.user) as count') 

==> [Doctrine\ORM\Query\QueryException]                    
    [Semantical Error] line 0, col 39 near 'FROM MyBundle:Order': Error: Class 'FROM' is not defined. 


$qb->select('COUNT(o_inner.user)') 
==> Works fine. So the "as count" statement seems to be a problem 


$qb->select('o_inner.user') 
==> [Doctrine\ORM\Query\QueryException]                       
    [Semantical Error] line 0, col 12 near 'user FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

$qb->select('o_inner') 
==> Workes fine 

$qb->select('o_inner, COUNT(o_inner.user)') 
==> Workes fine 

所以$qb->select('o_inner, COUNT(o_inner.user)')似乎爲第1步的工作,但因爲我不能使用自定義別名(... as count不工作) ,我如何才能在外部選擇中引用計數結果?

+0

嘗試計數(o_inner.user)或計數(o_inner.id),它需要一個文字。問候 – Albeis

回答

1

您正在使用的ORM,所以你需要指定你要計算的例子領域:

$qb->select('o_inner.user, COUNT(o_inner.user) as count') 
    ->from('MyBundle:Order', 'o_inner') 
    ->where('o_inner.status = :status') 
    ->groupBy('o_inner.user') 
    ->setParameter('status', 'completed'); 
; 
$tags = $qb->getQuery()->getResult(); 
0

您不必使用ORM像報告/統計複雜的查詢。

單個優化的SQL查詢可能具有更好的性能,並且易於理解和維護。

相關問題