2011-04-27 85 views
0

我需要使用原則執行sql查詢。查詢是非常簡單的學說查詢幫助

選擇Q *,COUNT(a.question_id)FROM 問題爲Q LEFT JOIN question_answers AS一個ON q.id = a.question_id GROUP BY a.question_id

爲此我寫了下面的代碼

$query = Doctrine_Query::create() 
      ->select('q.*, COUNT(a.question_id) AS answers') 
      ->from('Model_Question q') 
      ->leftJoin('Model_QuestionAnswers a ON q.id = a.question_id') 
      ->groupBy('a.question_id'); 

但是,這並不讓我所需的查詢。任何人都可以解釋我缺少的東西嗎?所生成我通過$query->buildSqlQuery()檢查查詢

SELECT q.id AS q__id, q.title AS q__title, q.short_description AS q__short_description, 
q.created_at AS q__created_at, q.updated_at AS q__updated_at, q.is_visible AS 
q__is_visible, q.category_id AS q__category_id, q.user_id AS q__user_id, q.category_name 
AS q__category_name, q.username AS q__username, COUNT(q2.question_id) AS q2__0 FROM 
question q, question_answers q2 GROUP BY q2.question_id 
+0

如果從連接中刪除「ON」條件會發生什麼(這應該是從模型判斷的默認條件,因此沒有理由指定它 - 它會自動連接到這些列上)? – prodigitalson 2011-04-27 08:27:07

回答

1

因爲你沒有使用表和型號名稱的標準命名慣例,原則越來越困惑的加入。我懷疑你也可能沒有定義模型/表之間的關係,以便Doctrine可以自動爲你建立連接。

嘗試改變在查詢您的leftJoin()調用看起來像這樣:

->leftJoin('q.Model_QuestionAnswers a') 

您可能需要明確地定義你的schema.yml文件的關係所以像上述簡單的語句將正常工作。例如,在定義Model_QuestionAnswers結束時,你可以這樣:

relations: 
    Model_Question: 
    local: question_id 
    foreign: id 
    foreignAlias: Model_QuestionAnswers 

另外一個側面說明:我注意到你正在使用單數和複數的名稱爲你的表和模式。常規選擇一個或另一個並堅持下去,特別是當您使用需要能夠猜測名稱和自動生成代碼的框架和/或ORM時。我在Symfony框架中使用Doctrine。至少在這種情況下,模型和表格名稱按照慣例是單數的。