Laravel查询转义句点(。)

时间:2015-07-16 11:13:26

标签: php mysql eloquent laravel-5

我正在更新基于Laravel的API。

使用Eloquent DB模型我已经写了一个范围来缩小我的查询范围到我们需要的范围。

我面临的问题是我们正在尝试将纬度/经度合作传递给查询,在查询中,它们应该用于拉出给定点的某个半径范围内的用户。

手动输入时查询工作正常,但在调用范围后转储SQL时,它已经转义了。在浮子内。

代码:

public static function scopeInRadius($query, $lat, $lng, $distance = 50)
{
        $qstring = '
        ( 3959 * acos(
            cos( radians( '.$lat.') )
          * cos( radians( latitude ) )
          * cos( radians( longitude) - radians('.$lng.') )
          + sin( radians( '.$lat.') )
          * sin( radians( latitude ) )
                     )
        )';
    return $query->where($qstring, '<', $distance);
}

var_dump()'ing ->toSql()上,我看到了以下输出:

string 'select * from `users` where `users`.`deleted_at` is null and `
        ( 3959 * acos(
            cos( radians( 53`.`258100) )
          * cos( radians( latitude ) )
          * cos( radians( longitude) - radians(2`.`127400) )
          + sin( radians( 53`.`258100) )
          * sin( radians( latitude ) )
                     )
        )` < ?' (length=376)``

我确信必须有一种相当简单的方法来逃避这些时期,尽管我还是找不到它!任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用 whereRaw 而不是 where ,只是为了安全起见,请确保将参数转换为float:

$lng = floatval($lng);
$lat = floatval($lat);
$distance = floatval($distance);

return $query->whereRaw($qstring . ' < ' . $distance);

答案 1 :(得分:1)

qstring变量的值应为

$qstring = "
    ( 3959 * acos(
        cos( radians( ".$lat.") )
      * cos( radians( latitude ) )
      * cos( radians( longitude) - radians(".$lng.") )
      + sin( radians( ".$lat.") )
      * sin( radians( latitude ) )
                 )
    )";