Opdater
Hvis du bruger paginate()
med din forespørgsel vil laravel forsøge at udføre følgende SQL-kode for at tælle det samlede antal mulige matches:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Som du kan se, er der ingen sådan kolonne eller alias distance
i denne forespørgsel.
Mulighed 2 i mit oprindelige svar vil det også løse det problem.
Oprindeligt svar
Det ser ud til at være et MySQL-strict-mode-problem. Hvis du bruger laravel 5.3 er streng tilstand aktiveret som standard. Du har to muligheder:
Mulighed 1:Deaktiver streng tilstand for MySQL i config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Mulighed 2:Brug en WHERE-betingelse
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 Modes - ONLY_FULL_GROUP_BY