Laravel Поиск по расстоянию от пользователей

Привет, у меня есть эта форма поиска, которая работает отлично, все, кроме расстояния от пользователя, я немного заблудился, как бы я это заработал, но вот что у меня есть

public static function Search($input)
{
$date = \Carbon\Carbon::now()->subMinute(30);
$query = User::rightJoin('user_profiles', 'users.id', '=', 'user_profiles.user_id');

if (isset($input ['minAge']) && $input['minAge']) {
$minAge = $input['minAge'];
$maxDate = \Carbon\Carbon::today()->subYears($minAge)->endOfDay();
}

if (isset($input ['maxAge']) && $input['maxAge']) {
if ($input['maxAge'] < $input['minAge']) {
$maxAge = $input['minAge'];
}
else {
$maxAge = $input['maxAge'];
}
$minDate = \Carbon\Carbon::today()->subYears($maxAge + 1);
}

if (isset($input['u']) && $input['u'])
$query->where('users.username', '=', $input['u']);
if (isset($input['p'])  && $input['p'])
$query->where('user_profiles.postcode', '=', $input ['p']);
if (isset($input['o1']) && $input['o1'])
$query->where('users.last_online','>=',$date);
if (isset($input['o2']) && $input['o2'])
$query->whereNotNull('user_profiles.avatar');
if (isset($input ['o3']) && $input['o3'])
$query->orderBy('users.type', 'ASC');
if (isset($input ['minAge']) && $input['minAge'])
$query->whereBetween('user_profiles.dob', [$minDate, $maxDate]);
if (isset($input ['g']))
$query->whereIn('user_profiles.gender',$input ['g']);
if (isset($input ['d']))
$query->select('user_profiles.lat, user_profiles.long
( 6371 * acos( cos( radians(?) ) *
cos( radians( lat ) )
* cos( radians( long ) - radians(?)
) + sin( radians(?) ) *
sin( radians( lat ) ) )
) AS distance'
)
->having("distance", "<", "?")
->orderBy("distance")
->setBindings([$input['lat'], $input['long'], $input['lat'],  $input['d']]);$query->orderBy('users.last_online', 'DESC');
$users = $query->paginate(10);
return $users;
}

Где это имеет значение if (isset ($ input [‘d’])), это мой ввод для выбора расстояния от пользователя, параметры которого установлены примерно так: 5 для 5 км и 10 для 10 км и так далее.

Когда я ищу запрос, он говорит, что расстояние до столбца не существует и не существует, я думал, что вся математика о том, как определить долготу и широту пользователя, задает расстояние?

3

Решение

Вам нужно использовать DB::raw() обернуть код.

Похоже, что вы скопировали свой код отсюда, но удалили необработанный оператор: http://laravel.io/forum/04-23-2014-convert-this-geolocation-query-to-query-builder-for

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]