2017-01-10 16 views
6

nie jestem w stanie uruchomić ten proste zapytanie w laravel 5,3Grupa przez nie pracy - laravel

$top_performers = DB::table('pom_votes') 
     ->groupBy('performer_id') 
     ->get(); 

Daje mi:

SQLSTATE[42000]: Syntax error or access violation: 1055 'assessment_system.pom_votes.id' isn't in GROUP BY (SQL: select * from `pom_votes` group by `performer_id`) 

Jednak gdybym skopiować zapytanie surowego z błędu i Fire bezpośrednio w PhpMyAdmin, działa dobrze.

już sprawdzone to:

https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset

Każda pomoc będzie appricaited.

Dzięki

Parth Vora

+0

W bazie danych jest coś "nie tak". Jak widać w błędzie, MySQL oczekuje pola 'assessment_system.pom_voted.id', którego tam nie ma. – Loek

Odpowiedz

32

przejdź do swojej config/database.php folderu. W tablicy konfiguracyjnej mysql zmień ustawienie strict => true na strict => false, a wszystko będzie działać poprawnie.

+1

Dzięki za tonę. To był dokładny problem. –

+1

Byłoby dobrze, gdyby zostało wspomniane gdzieś w doktorze Laravel. –

+0

Witamy lepiej niż jakikolwiek dokument https://laravel.com/docs/5.3/installation –

1

Może Twój problem wynika z faktu, że używasz serwera MySQL z wersją 5.7.5+. Od tej wersji po drodze zmienia się prace, ponieważ powodują one zachowanie zgodności z SQL99 (gdzie w poprzednich wersjach nie było).

Spróbuj wykonać pełną grupę lub zmień konfigurację serwera MySQL.

Link do oficjalnego dokumentu MySQL gdzie pełny GROUP BY jest explanined

1

Jeśli fałszywy tryb ścisły to nie można korzystać z innych funkcji ścisłego naprawić ten błąd Idź do Illuminate \ database \ Złącza \ MySqlConnector.php i zmień funkcję jak poniżej:

protected function strictMode() { 
return "set session 
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY 
_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'"; 
} 

zastąpić funkcję tym.

+2

Edycja dostawców nigdy nie jest dobrym rozwiązaniem. –

+0

świetnie! Dziękuje! – Amin