2016-02-27 54 views
9

我有以下查詢生成器:主義的QueryBuilder ORDER BY子句是不是在SELECT列表

$queryBuilder = $this 
    ->createQueryBuilder('recipient') 
    ->leftJoin('recipient.message', 'message') 
    ->orderBy('message.dateSent', 'DESC'); 

這一直工作正常:) - 但自從升級到Mysql 5.7我已經開始到處出現此錯誤:

SQLSTATE[HY000]:
General error: 3065
Expression #1 of ORDER BY clause is not in SELECT list, references column 'dctrn_result.date_sent_5' which is not in SELECT list;
this is incompatible with DISTINCT

我已經在大多數地方,我現在用的是DBAL層通過剛纔添加的項目選擇列表中解決了這個,但我無法弄清楚如何做到這一點與這個特殊的queryBuilder

+0

一個解決方案,我發現,也爲我工作的描述[這裏](http://stackoverflow.com/a/40000429/572801) – cwhisperer

回答

1

有一個在#4846報告的錯誤,它似乎與#sqlmode_only_full_group_by有關,並且有一些例子可能是什麼意思here。直到一個正確的解決方案出來一個解決方案將->addSelect('message')添加到查詢(我不知道它是否解決了問題或教條重寫查詢無論如何),但這種方式教條將水合按摩以及可能不需要或禁用ONLY_FULL_GROUP_BY sql模式,但是,mysql可能會返回無效數據。

21

你必須編輯/etc/mysql/mysql.cnf

[mysqld] 
sql-mode="" 

不要忘了重新啓動該服務的mysql:

​​

有關信息,我使用的是Ubuntu 16.04 LTS。

+1

這對我工作,謝謝:) – lock

+0

這工作..但爲什麼? –

0

其實mysql的5.7包含「ONLY_FULL_GROUP_BY」在SQL mode.So我們不能在沒有選擇list.we元素進行排序依據必須從

'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

變成

'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

我們可以通過執行以下查詢

做到了這一點0

謝謝,

素里亞

0

當使用QueryBuilder,加入表不自動添加到選擇列表中。您可以撥打addSelect(TABLE_ALIAS)擺脫錯誤。

$queryBuilder = $this 
    ->createQueryBuilder('recipient') 
    ->leftJoin('recipient.message', 'message') 
    ->addSelect('message') //THIS LINE 
    ->orderBy('message.dateSent', 'DESC'); 
相關問題