Laravel: Отношение пустое после использования `whereHas` и` with`? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть этот запрос:

 $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

1 Ответ

0 голосов
/ 17 мая 2018

Мне пришлось добавить ссылочный ключ к selectRaw следующим образом:

return $query->selectRaw('user_id, lat, lng, ( 3959 * acos( cos
...