Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:在一定距离内选择模型,根据每个项目半径选择_Php_Mysql_Laravel_Laravel 5_Geospatial - Fatal编程技术网

Php Laravel:在一定距离内选择模型,根据每个项目半径选择

Php Laravel:在一定距离内选择模型,根据每个项目半径选择,php,mysql,laravel,laravel-5,geospatial,Php,Mysql,Laravel,Laravel 5,Geospatial,我正在使用Laravel 5,在半径和邮政编码选择方面遇到了一个难题 我有一个酒店模型和一个大的酒店数据库。我所在的DB中的每家酒店都有一个Lat/Lng,还有一个半径(以英里为单位),表示他们接受客户的距离。这些酒店的半径大多为50,但有些更高或更低 我的网站上的用户输入zipcode进行搜索。我使用这个zipcode返回Lat/Lng,然后查询X英里范围内的所有酒店。我目前正在使用此代码: $lat = '123'; // geocoded from user entered zip $ln

我正在使用Laravel 5,在半径和邮政编码选择方面遇到了一个难题

我有一个酒店模型和一个大的酒店数据库。我所在的DB中的每家酒店都有一个Lat/Lng,还有一个半径(以英里为单位),表示他们接受客户的距离。这些酒店的半径大多为50,但有些更高或更低

我的网站上的用户输入zipcode进行搜索。我使用这个zipcode返回Lat/Lng,然后查询X英里范围内的所有酒店。我目前正在使用此代码:

$lat = '123'; // geocoded from user entered zip
$lng = '123'; // geocoded from user entered zip
$radius = '50'; // currently, hardcoded, need to change

$hotels = Hotel::select(
     \DB::raw("*,
    ( 3959 * acos( cos( radians(" . $lat . ") ) *
    cos( radians( lat ) )
    * cos( radians( lng ) - radians(" . $lng . ")
    ) + sin( radians(" . $lat . ") ) *
    sin( radians( lat ) ) )
    ) AS distance"))
        ->having("distance", "<", $radius)
        ->orderBy("distance")
        ->get();
$lat='123';//根据用户输入的zip进行地理编码
$lng='123';//根据用户输入的zip进行地理编码
$radius='50';//目前,硬编码,需要更改
$hotels=酒店::选择(
\DB::原始(“*”,
(3959*acos(弧度(“.$lat”))*
cos(弧度(纬度))
*cos(弧度(lng)-弧度(“.$lng”)
)+sin(弧度(“.$lat.”)*
sin(弧度(纬度)))
)如距离“))

->拥有(“距离”,“时,您只需将计算的距离与半径列中的数字(或您在hotels表中所称的半径列)进行比较

尝试用此
havingRaw
替换
havingRaw
中的
having
子句。您需要将
radius
更改为表中存储酒店半径的列的名称。使用小于或等于可能也更好

->havingRaw("distance <= radius")
->havingRaw(“距离