Я работаю над проектом, и мне нужно упорядочить свои объявления по расстоянию (используя широту и долготу), вдобавок к этому я хочу, чтобы пользователь мог ограничить количество объявлений, уменьшив максимальное расстояние Например: если пользователь хочет получить только рекламу на расстоянии 100 милов рядом с ним, поэтому я заказываю рекламу и возвращаю ему только объявления о том, что они находятся на расстоянии 100 миль от него или меньше Я проделал некоторую работу, реклама уже готова, но я понятия не имею, как продолжить
public function get_searched(Request $request){
$annonce=DB::table("annonces")
->where('nomAnnonce','like','%'.$request->input("nomAnnonce").'%')
->orderBy(
DB::raw('3959 * acos( cos( radians('.$request->input("lat").') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-'.$request->input("lon").') ) + sin( radians('.$request->input("lat").') ) * sin(radians(latitude)) )')
,'desc')
->get();
echo $annonce;
}
Если кто-нибудь может помочь мне найти, почему ограничить максимальное расстояние и thnx
Что такое «100 мил» или «100 мил»? Может, «100 миль»? Сколько строк в таблице?






Использовать это:
$annonce = DB::table("annonces")
->select('annonces.*')
->selectRaw('3959 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-?) ) + sin( radians(?) ) * sin(radians(latitude))) distance',
[$request->input('lat'), $request->input('lon'), $request->input('lat')])
->where('nomAnnonce', 'like', '%'.$request->input("nomAnnonce").'%')
->orderBy('distance', 'desc')
->having('distance', '<=', $request->input('max'))
->get();
Как указывает Девон, использование нефильтрованного пользовательского ввода чрезвычайно опасно (SQL-инъекция).
Привет, сэр, это действительно работает, но возвращает только расстояние, но мне нужно получить все значения, если вы можете помочь больше, пожалуйста. это результат, который я получаю, когда помещаю свои значения [{"distance": 189.36192877229}].
Моя ошибка, я исправил ответ.
НЕ используйте ввод запроса непосредственно в необработанном выражении без его приведения к типу. Это полностью лишает защиты от инъекций.