У меня есть этот запрос:
$user = \App\User::where('id','=',191)
->whereHas('addresses', function($q){
$q->getByDistance(52.5293878, 13.3416309, 5);
})
->with(['addresses' => function($q){
$q->getByDistance(52.5293878, 13.3416309, 5);
}])
->get();
dd($user);
Это выбирает пользователя с идентификатором 191
, только если у него есть адрес в диапазоне, и затем он также нетерпеливо загружает адрес.
Это scopeGetByDistance
функция из класса addresses
public static function scopeGetByDistance($query,$lat, $lng, $max_distance)
{
return $query->selectRaw('lat, lng, ( 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 )
->orderBy( 'distance', 'ASC' );
}
Я выбрал пользователя с помощью id
191, потому что я знаю, что у него есть адрес с расстоянием ~ 2 до координат.
Это выведет пользователя, но отношение будет пустым.Разве whereHas
не должен убедиться, что отношение не пустое?Я также точно знаю, что он должен иметь адрес в диапазоне.Вот как выглядит отношение:
![enter image description here](https://i.stack.imgur.com/E1vzp.png)