Actualizar
Si usa paginate()
con tu consulta laravel intentará ejecutar el siguiente código SQL para contar el número total de posibles coincidencias:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Como puede ver, no existe tal columna o alias distance
en esta consulta.
Opción 2 en mi respuesta original también solucionará ese problema.
Respuesta original
Eso parece ser un problema de modo estricto de MySQL. Si usa laravel 5.3, el modo estricto está habilitado de forma predeterminada. Tienes dos opciones:
Opción 1:deshabilite el modo estricto para MySQL en config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Opción 2:Usar una condición 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');
Documentación:
Modos SQL del servidor:ONLY_FULL_GROUP_BY