Bijwerken
Als u paginate()
. gebruikt met uw zoekopdracht zal laravel proberen de volgende SQL-code uit te voeren om het totale aantal mogelijke overeenkomsten te tellen:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Zoals je kunt zien, is er geen dergelijke kolom of alias distance
in deze zoekopdracht.
Optie 2 in mijn oorspronkelijke antwoord zal dat probleem ook oplossen.
Oorspronkelijk antwoord
Dat lijkt een MySQL-strict-mode-probleem te zijn. Als u laravel 5.3 gebruikt, is de strikte modus standaard ingeschakeld. Je hebt twee opties:
Optie 1:Schakel de strikte modus voor MySQL uit in config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Optie 2:gebruik een WHERE-voorwaarde
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');
Documentatie:
Server SQL-modi - ALLEEN_FULL_GROUP_BY