x}),2) + POW((y - {$this->y}),2) ) AS distance"))" />

Laravel 5.3: Синтаксическая ошибка или нарушение доступа: 1463 В предложении HAVING используется не группирующее поле «расстояние»

mysql laravel eloquent

8254 просмотра

3 ответа

Эта ошибка возникла после переноса всего исходного кода в версию 5.3, и я уже два часа чешу голову.

Итак, у меня есть такой красноречивый запрос:

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();

Он работал найти до обновления, теперь он бросает:

Синтаксическая ошибка или нарушение прав доступа: 1463 В предложении HAVING используется не группирующее поле 'distance' (SQL: select *, SQRT (POW ((x - 860.0000), 2) + POW ((y - 105.0000), 2)) AS расстояние от poiгде status= 1 и idне в (1) с distanceпорядком <= 6 по distanceasc)

Я хотел проверить, включен ли режим ONLY_FULL_GROUP_BY на моем сервере, но это не так ...

ВЫБЕРИТЕ @@ sql_mode NO_ENGINE_SUBSTITUTION

Тот же запрос отлично работает в MySQL. В чем дело?

Автор: user3343366 Источник Размещён: 08.11.2019 11:12

Ответы (3)


43 плюса

Решение

Проверьте в файле config / database.php в соединении mysql, что строгий является ложным:

'strict' => false,

Если это правда, положить в ложь.

Автор: rebduvid Размещён: 12.09.2016 11:24

0 плюса

Попробуйте использовать групповое предложение в поле расстояния.

  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();
Автор: Hamza Dairywala Размещён: 20.08.2016 12:06

0 плюса

Я не знаю, почему вы получаете эту ошибку после обновления, но не раньше. Однако вы можете переместить условие расстояния в предложение WHERE:

->where(DB::raw("SQRT( POW((x - {$this->x}),2) + POW((y - {$this->y}),2) ) "), '<=', $distance)
Автор: Paul Spiegel Размещён: 20.08.2016 01:49
32x32