Актуализиране
Ако използвате paginate()
с вашата заявка laravel ще се опита да изпълни следния SQL код, за да преброи общия брой възможни съвпадения:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Както можете да видите, няма такава колона или псевдоним distance
в тази заявка.
Вариант 2 в първоначалния ми отговор ще коригира и този проблем.
Оригинален отговор
Това изглежда е проблем със строг режим на MySQL. Ако използвате laravel 5.3, стриктният режим е активиран по подразбиране. Имате две опции:
Опция 1:Деактивирайте строг режим за MySQL в config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Вариант 2:Използвайте условие 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');
Документация:
Режими на SQL на сървъра – ONLY_FULL_GROUP_BY