Perbarui
Jika Anda menggunakan paginate()
dengan kueri Anda, laravel akan mencoba mengeksekusi kode SQL berikut untuk menghitung jumlah total kemungkinan kecocokan:
select count(*) as aggregate
from `vehicles` inner join `dealers`
on `vehicles`.`dealer_id` = `dealers`.`id`
having distance < 200
Seperti yang Anda lihat, tidak ada kolom atau alias distance
dalam kueri ini.
Opsi 2 dalam jawaban asli saya akan memperbaiki masalah itu juga.
Jawaban asli
Tampaknya itu adalah masalah mode ketat MySQL. Jika Anda menggunakan laravel 5.3, mode ketat diaktifkan per default. Anda memiliki dua opsi:
Opsi 1:Nonaktifkan mode ketat untuk MySQL di config/database.php
...
'mysql' => [
...
'strict' => false,
...
],
...
Opsi 2:Gunakan kondisi 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');
Dokumentasi:
Mode SQL Server - ONLY_FULL_GROUP_BY