我的用户
类hasMany 地址
类。 address
类具有范围查询功能,可以获取某个区域附近的所有地址:
public static function scopeGetByDistance($query,$lat, $lng, int $max_distance)
{
return $query->selectRaw('id, lat, lng, profileAddress.idMember, ( 3959 * acos( cos( radians( '. $lat.') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(lat) ) ) ) AS distance')
->having('distance', '<', $max_distance );
}
我想让所有拥有 max_distance
地址的用户到达某个 (lat,lng)
点,并且我想让他们按该距离排序。
如何使用查询生成器实现这一目标?我试过这个:
$users = \App\User::leftJoin('addresses', function($join){
$join->getByDistance(44.81, 20.46, 20);
})
->select(DB::raw('MIN(distance) as closest'))
->groubBy('user.id')
->orderBy('closest')
->get();
但这会导致
Method Illuminate\Database\Query\JoinClause::getByDistance does not exist.
最佳答案
好吧,我刚刚发现 join and relationships are not supported by Laravel
这就是我最终所做的:
$users = \App\User::leftJoin('profileAddress','users.id','=','profileAddress.id')
->selectRaw('profileAddress.*, MIN(3959 * acos( cos( radians( '. $lat.') ) * cos( radians( profileAddress.lat ) ) * cos( radians( profileAddress.lng ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(lat) ) ) ) as closest')
->groupBy('users.id')
->having('closest', '<', 20)
->orderBy('closest')
->get();
关于php - 拉拉维尔 : Use join and scope query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779054/