Aktualisieren
Wenn Sie paginate()
verwenden mit Ihrer Abfrage wird Laravel versuchen, den folgenden SQL-Code auszuführen, um die Gesamtzahl möglicher Übereinstimmungen zu zählen:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Wie Sie sehen können, gibt es keine solche Spalte oder diesen Alias distance
in dieser Abfrage.
Option 2 in meiner ursprünglichen Antwort wird dieses Problem auch beheben.
Originalantwort
Das scheint ein Problem im strengen MySQL-Modus zu sein. Wenn Sie Laravel 5.3 verwenden, ist der strikte Modus standardmäßig aktiviert. Sie haben zwei Möglichkeiten:
Option 1:Deaktivieren Sie den strikten Modus für MySQL in config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Option 2:Verwenden Sie eine WHERE-Bedingung
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');
Dokumentation:
Server-SQL-Modi - ONLY_FULL_GROUP_BY