【问题标题】:Laravel Searching by distance from usersLaravel 按与用户的距离搜索
【发布时间】:2016-07-22 17:22:56
【问题描述】:

嘿,所以我有这个完美运行的搜索表单,除了与用户的距离之外,我有点迷失如何让它工作,但这就是我所拥有的

public static function Search($input)
{
    $date = \Carbon\Carbon::now()->subMinute(30);
    $query = User::rightJoin('user_profiles', 'users.id', '=', 'user_profiles.user_id');

    if (isset($input ['minAge']) && $input['minAge']) {
        $minAge = $input['minAge'];
        $maxDate = \Carbon\Carbon::today()->subYears($minAge)->endOfDay();
    }

    if (isset($input ['maxAge']) && $input['maxAge']) {
        if ($input['maxAge'] < $input['minAge']) {
            $maxAge = $input['minAge'];
        }
        else {
            $maxAge = $input['maxAge'];
        }
        $minDate = \Carbon\Carbon::today()->subYears($maxAge + 1);
    }

    if (isset($input['u']) && $input['u'])
        $query->where('users.username', '=', $input['u']);
    if (isset($input['p'])  && $input['p'])
        $query->where('user_profiles.postcode', '=', $input ['p']);
    if (isset($input['o1']) && $input['o1'])
        $query->where('users.last_online','>=',$date);
    if (isset($input['o2']) && $input['o2'])
        $query->whereNotNull('user_profiles.avatar');
    if (isset($input ['o3']) && $input['o3'])
        $query->orderBy('users.type', 'ASC');
    if (isset($input ['minAge']) && $input['minAge'])
        $query->whereBetween('user_profiles.dob', [$minDate, $maxDate]);
    if (isset($input ['g']))
        $query->whereIn('user_profiles.gender',$input ['g']);
    if (isset($input ['d']))
        $query->select('user_profiles.lat, user_profiles.long
            ( 6371 * acos( cos( radians(?) ) *
                       cos( radians( lat ) )
                       * cos( radians( long ) - radians(?)
                       ) + sin( radians(?) ) *
                       sin( radians( lat ) ) )
                     ) AS distance'
            )
        ->having("distance", "<", "?")
        ->orderBy("distance")
        ->setBindings([$input['lat'], $input['long'], $input['lat'],  $input['d']]);


    $query->orderBy('users.last_online', 'DESC');
    $users = $query->paginate(10);
    return $users;
}

如果 (isset($input ['d'])) 这是我的输入,用于选择与用户的距离,选项设置为 5 代表 5 公里,10 代表 10 公里,依此类推。

一旦我搜索查询它说列距离不存在并且它不存在,我认为关于计算用户经度和纬度的整个数学设置距离?

【问题讨论】:

    标签: php mysql laravel search distance


    【解决方案1】:

    您需要使用DB::raw() 包裹代码。

    看起来您从此处复制了代码,但删除了原始语句:http://laravel.io/forum/04-23-2014-convert-this-geolocation-query-to-query-builder-for

    【讨论】:

    • 所以 $query->DB::raw()??因为我在使用 join 语句时尝试这样做,但我不确定这是否可能
    • 所以我让它自己工作但是,我想将它与整个查询融合在一起,我不确定如何将它用于整个查询,例如,是否可以执行 $query = DB::select( as $query->DB::select( 事物类型
    猜你喜欢
    • 2016-07-07
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多