Aktualizacja
Jeśli używasz paginate()
z Twoim zapytaniem laravel spróbuje wykonać następujący kod SQL, aby policzyć całkowitą liczbę możliwych dopasowań:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Jak widać, nie ma takiej kolumny ani aliasu distance
w tym zapytaniu.
Opcja 2 w mojej oryginalnej odpowiedzi rozwiąże również ten problem.
Oryginalna odpowiedź
To wydaje się być problemem MySQL w trybie ścisłym. Jeśli używasz laravel 5.3, tryb ścisły jest domyślnie włączony. Masz dwie opcje:
Opcja 1:Wyłącz tryb ścisły dla MySQL w config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Opcja 2:użyj warunku WHERE
Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
->whereRaw('cos( radians(latitude) ) * cos( radians( longitude ) ) < 200');
Dokumentacja:
Tryby serwera SQL — ONLY_FULL_GROUP_BY