Laravel: упорядочить по родителю по столбцу отношений AS - PullRequest
0 голосов
/ 09 октября 2018

У меня есть одна область действия на одной из моих Location моделей.В моем случае Shop имеет отношение one to many с Locations.Location имеет широту и долготу.$latitude, $longitude, $radius приходят из поля поиска.Я пытаюсь заказать Shop на расстоянии Location от пользователя, который ищет.

public function scopeCloseTo($query, $latitude, $longitude, $radius = 25)
{
  $haversine = "(3959 * acos(cos(radians($latitude))
                 * cos(radians(latitude))
                 * cos(radians(longitude)
                 - radians($longitude))
                 + sin(radians($latitude))
                 * sin(radians(latitude))))";
 return $query
    ->select('*')
    ->selectRaw("{$haversine} AS distance")
    ->whereRaw("{$haversine} < ?", [$radius]);
}

, и я использую его так

    return Shop::with(['locations' => function ($query) use ($latitude, $longitude, $radius) {
       $query->closeTo($latitude, $longitude, $radius);
    }])->whereHas('locations', function ($query) use ($latitude, $longitude, $radius) {
        $query->closeTo($latitude, $longitude, $radius);
    });

И это работаетхорошо, это позволяет мне найти все магазины в пределах определенного радиуса.

То, что я хочу сделать, это затем заказать Shops по расстоянию.

Добавление orderBy к closeTo в замыкании просто заказывает locations.Вы не можете заказать по Distance на Shop, так как он не существует.Как мне обойти это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...