Cette erreur est survenue après le déplacement de l'intégralité du code source vers la version 5.3 et je me gratte la tête depuis plus de deux heures maintenant.
J'ai donc ce genre de requête éloquente:
POI::select('*', DB::raw("SQRT( POW((x - {$this->x}),2) + POW((y - {$this->y}),2) ) AS distance"))
->where('status', Config::get('app.poi_state.enabled'))
->whereNotIn('id', $excludePOIList)
->having('distance', '<=', $distance)
->orderBy('distance')->get();
Cela a fonctionné trouver avant la mise à jour maintenant il jette:
Erreur de syntaxe ou violation d'accès: 1463 Le champ non groupant 'distance' Est utilisé dans la clause HAVING (SQL: sélectionnez *, SQRT (POW ((x - 860.0000), 2) + POW ((y - 105.0000)). , 2)) AS distance de
poi
oùstatus
= 1 etid
pas dans (1) ayantdistance
<= 6 ordre dedistance
asc)
Je voulais vérifier si le mode ONLY_FULL_GROUP_BY est activé sur mon serveur, mais ce n'est pas le cas ...
SELECT @@ sql_mode NO_ENGINE_SUBSTITUTION
La même requête fonctionne bien dans MySQL Workbench. Que se passe-t-il?
Vérifiez dans le fichier config/database.php de la connexion mysql que le strict est false:
'strict' => false,
Si est vrai, mettez dans faux.
Je ne sais pas pourquoi vous obtenez cette erreur après la mise à niveau mais pas avant. Cependant, vous pouvez déplacer la condition de distance dans la clause WHERE:
->where(DB::raw("SQRT( POW((x - {$this->x}),2) + POW((y - {$this->y}),2) ) "), '<=', $distance)
Essayez d’utiliser groupe par clause sur le champ de distance.
POI::select('*', DB::raw("SQRT( POW((x - {$this->x}),2) + POW((y - {$this->y}),2) ) AS distance"))
->where('status', Config::get('app.poi_state.enabled'))
->whereNotIn('id', $excludePOIList)
->groupBy('distance')
->having('distance', '<=', $distance)
->orderBy('distance')->get();