2017-06-12 50 views
2

我剛剛遇到了一件非常煩人的事情。我有一個查詢生成器:原則查詢生成器錯誤結果

$queryBuilder 
    ->select('a') 
    ->addSelect('am') 
    ->addSelect('m') 
    ->addSelect('c') 
    ->addSelect('t') 
    ->leftJoin('a.articleMedias', 'am') 
    ->leftJoin('am.media', 'm') 
    ->leftJoin('a.categories', 'c') 
    ->leftJoin('a.translations', 't') 
    ->add('where', $queryBuilder->expr()->in('a.site', $ids)) 
; 

當我得到的結果,我得到192個對象。 問題是,當我轉儲SQL並直接執行到數據庫,我得到529對象。但這是相同的查詢!

有人知道造成這兩個結果之間的差距的原因?

編輯:發現了一些東西。當我做一個計數查詢時,我得到了203個結果,但是當我做一個正常的結果並計算結果時,我得到了192個結果。這是否意味着教條有最大變異或什麼?

編輯2:它似乎是特定於我的應用程序的繼承問題。再次感謝您的幫助。

+0

什麼是SQL查詢,你都做了些什麼? –

+1

這是因爲leftJoins的。如果在數據庫查詢密切關注結果你會發現有多行含有'a'的行多次出現,而連接的內容不同。試着在你的本地sql查詢中添加一個'GROUP BY a.id' (這將消除大量的數據,但它應該降低到192個結果,因爲每個輸入項只會顯示一次)。 – Joe

+0

感謝您的回覆。我發現了一些可能導致某些事情的東西。當我做一個SQL計數()查詢我得到203結果。但是當我做一個getResult()和一個PHP計數()時,我得到了192.這真的很奇怪,我實際上有點迷茫。 –

回答

2

對此的最可能的答案是,您沒有獲得529個對象,但其中529行包含192個對象(因爲左連接)。

直接把查詢時到數據庫,你必須計算SQL的唯一的(或在條款:DISTINCT行的對象的根據您的ID列更改您轉儲到SELECT DISTINCT <you_primary_key_column>, <rest of your query>查詢這個結果應該給你192它匹配您的192個對象行。

如果沒有,請您發表您的結果查詢?

+0

感謝您的回覆。當我添加不同的查詢時,我得到了相同的結果。但是,如果我只保留選擇和添加我的查詢生成器或如果我通過a.id我分組得到更接近的結果。原始查詢會返回203個結果(有或沒有獨立查詢),並且查詢生成器將粘貼到192.以下是原始查詢:https://gist.github.com/TristanPerchec/4cf6e70787bd6a7017d301a3e3ce830b –