在DB :: raw上的Laravel条件

时间:2018-06-07 14:12:01

标签: php mysql laravel latitude-longitude

正在进行项目工作,我需要通过距离(通过使用纬度和经度)来订购我的广告,我希望通过加宽最大距离让用户abl限制广告数量 例如:如果用户想要获得他旁边100密耳的广告,那么我订购广告并向他返回他们距离他100毫米或更少的广告 我做过somme工作ordring广告已经完成但我不知道如何继续

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 :(得分:0)

使用此:

$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();

正如Devon指出的那样,使用未经过滤的用户输入非常危险(SQL injection)。