Aktualizovat
Pokud použijete paginate()
s vaším dotazem se laravel pokusí provést následující kód SQL, aby spočítal celkový počet možných shod:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Jak vidíte, žádný takový sloupec nebo alias distance
neexistuje v tomto dotazu.
Možnost 2 v mé původní odpovědi tento problém také vyřeší.
Původní odpověď
Zdá se, že jde o problém v přísném režimu MySQL. Pokud používáte laravel 5.3, přísný režim je ve výchozím nastavení povolen. Máte dvě možnosti:
Možnost 1:Zakažte přísný režim pro MySQL v config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Možnost 2:Použijte podmínku 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');
Dokumentace:
Režimy SQL serveru – ONLY_FULL_GROUP_BY