Laravel:按父级按关系AS列排序

时间:2018-10-09 20:55:10

标签: laravel eloquent

我的Location模型之一具有以下作用域。在我的情况下,Shopone to manyLocations关系。 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订购,因为它不存在。我该如何解决?

0 个答案:

没有答案