Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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_Eloquent - Fatal编程技术网

Php 在Laravel应用程序中按纬度和经度查找关系计数

Php 在Laravel应用程序中按纬度和经度查找关系计数,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在尝试在Laravel上构建一个应用程序。我有一个模型项目,它有id,名称,州id,城市id,纬度,经度,状态,以及时间戳 我尝试添加一个附近的特性,该特性根据纬度和经度约束查找项目。我的问题是: $projects = Project::where('projects.status', 'saved') ->selectRaw("*, ( 6371 * acos( cos( radians(?) ) * cos( radians( latit

我正在尝试在Laravel上构建一个应用程序。我有一个模型
项目
,它有
id
名称
州id
城市id
纬度
经度
状态
,以及
时间戳

我尝试添加一个附近的特性,该特性根据纬度和经度约束查找项目。我的问题是:

$projects = Project::where('projects.status', 'saved')
    ->selectRaw("*,
     ( 6371 * acos( cos( radians(?) ) *
       cos( radians( latitude ) )
       * cos( radians( longitude ) - radians(?)
       ) + sin( radians(?) ) *
       sin( radians( latitude ) ) )
     ) AS distance", [request('latitude'), request('longitude'), request('latitude')])->having("distance", "<", request('range')
    ->with('state', 'city')
    ->orderBy('projects.updated_at', 'desc')
    ->paginate(50)
$projects=Project::where('projects.status','saved')
->选择原始(“*”,
(6371*acos(cos(弧度(?)*
cos(弧度(纬度))
*cos(弧度(经度)-弧度(?)
)+sin(弧度(?)*
sin(弧度(纬度)))

)作为距离“,[request('latitude')、request('latitude')、request('latitude'))->having('distance“,”问题可能是在
having()
调用中将数据库和表名作为前缀

由于
distance
是在
selectRaw
中创建的别名,因此您需要使用
havingRaw()

->havingRaw('distance<?',request('range'))

$lat=$request->latitude;
$lng=$request->longitude???”;
$distance=$request->range???”;
$states=State::query();
$states=$states::withCount(['projects'=>函数($q)use($lat,$lng,$distance){
$haversineSQL=“(6371*acos(弧度('{$lat}'))*cos(弧度(纬度))*cos(弧度(经度)-弧度('{$lng}'))+sin(弧度('{$lat}')))*sin(弧度(纬度))”;
$states=$states->whereRaw($haversineSQL.<?',$distance);
}])->orderBy('name','desc')->paginate(2);

$states = State::withCount(['projects' => function ($query) use ($lat,$lng,$distance){
        $query->select(\DB::raw('*,( COALESCE( 6371 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat . ') ) * sin( radians( latitude ) ) ) ) ) AS distance'))->having('distance', '<', $distance );
    }])->orderBy('name', 'desc')->paginate(2);
$states=State::withCount(['projects'=>函数($query)use($lat,$lng,$distance){

$query->select(\DB::raw('*,(合并(6371*acos(弧度('.$lat'))*cos(弧度(纬度))*cos(弧度(经度)-弧度('.$lng'))+sin(弧度('.$lat'))*sin(弧度(纬度))->(“距离”,我会认为任何有效的方法都是“更好的”。如果是我,我会从sql开始。尝试过havingRaw..但得到相同的错误。。
$lat = $request->latitude ?? '';
$lng = $request->longitude ?? '';
$distance = $request->range ?? '';
$states = State::query();
$states = $states::withCount(['projects' => function ($q) use ($lat,$lng,$distance){
    $haversineSQL = "( 6371 * acos( cos( radians('{$lat}') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('{$lng}') ) + sin( radians('{$lat}') ) * sin( radians( latitude ) ) ) )";
    $states = $states->whereRaw($haversineSQL . '< ?', $distance);
}])->orderBy('name', 'desc')->paginate(2);
$states = State::withCount(['projects' => function ($query) use ($lat,$lng,$distance){
        $query->select(\DB::raw('*,( COALESCE( 6371 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat . ') ) * sin( radians( latitude ) ) ) ) ) AS distance'))->having('distance', '<', $distance );
    }])->orderBy('name', 'desc')->paginate(2);