web-dev-qa-db-fra.com

Laravel 5.3: Erreur de syntaxe ou violation d'accès: 1463 Le champ non groupant 'distance' est utilisé dans la clause HAVING

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 poistatus = 1 et id pas dans (1) ayant distance <= 6 ordre de distance 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?

11
user3343366

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.

39
rebduvid

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)
0
Paul Spiegel

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();
0
Hamza Dairywala