Условие Laravel для БД :: raw

Я работаю над проектом, и мне нужно упорядочить свои объявления по расстоянию (используя широту и долготу), вдобавок к этому я хочу, чтобы пользователь мог ограничить количество объявлений, уменьшив максимальное расстояние Например: если пользователь хочет получить только рекламу на расстоянии 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

НЕ используйте ввод запроса непосредственно в необработанном выражении без его приведения к типу. Это полностью лишает защиты от инъекций.

Devon 07.06.2018 16:30

Что такое «100 мил» или «100 мил»? Может, «100 миль»? Сколько строк в таблице?

Rick James 10.06.2018 17:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использовать это:

$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}].

aymen medjader 07.06.2018 16:41

Моя ошибка, я исправил ответ.

Jonas Staudenmeir 07.06.2018 16:43

Другие вопросы по теме