Из того, что я вижу, подзапрос не нужен, и вы можете преобразовать запрос в нотацию Laravel следующим образом:
$clinics = Clinic::join('countries', 'countries.id', '=', 'clinics.country_id')
->selectRaw('clinics.*, countries.*, (
100 * acos(
cos(radians(?)) *
cos(radians(lat)) *
cos(radians(lng) - radians(?)) +
sin(radians(?)) * sin(radians(lat))
)
) as distance', [$lat, $lng, $lat])
->having('distance', '<', 100)
->orderBy('distance')
->get();
Возможно, вы захотите явно указать, какие столбцы вы хотите выбрать изcountries
table, потому что с countries.*
вы переопределите, например, столбец id
вашей таблицы clinics
.Я добавил countries.*
, потому что, думаю, это то, что вы хотели сделать после объединения таблиц.