Состояние Laravel на БД :: raw - PullRequest
0 голосов
/ 07 июня 2018

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

1 Ответ

0 голосов
/ 07 июня 2018

Используйте это:

$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-инъекция ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...