Uppdatera
Om du använder paginate()
med din fråga kommer laravel att försöka köra följande SQL-kod för att räkna det totala antalet möjliga matchningar:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Som du kan se finns det ingen sådan kolumn eller alias distance
i den här frågan.
Alternativ 2 i mitt ursprungliga svar kommer även det problemet att lösas.
Originalt svar
Det verkar vara ett MySQL-strikt lägesproblem. Om du använder laravel 5.3 är strikt läge aktiverat som standard. Du har två alternativ:
Alternativ 1:Inaktivera strikt läge för MySQL i config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Alternativ 2:Använd ett WHERE-villkor
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-lägen - ONLY_FULL_GROUP_BY