【问题标题】:Eloquent Laravel sort paginate query by related modelEloquent Laravel 按相关模型排序分页查询
【发布时间】:2019-09-16 05:46:36
【问题描述】:

我有以下 Eloquent 查询。

Company::has('cars')->with([
    'cars', 'location' => function ($q) {
        $q->nearBy(); // *** See futher
    }
])->take(40)->paginate(10);

如何按距离订购公司?

*** 这是Location-model 中的 NearBy 范围:

public function scopeNearBy($query)
{
    $location = json_decode(request()->cookie('location'));
    $query->distance($location->lat, $location->lng); // ** Using package

    return $query->orderBy('distance');
}

** 使用this package

距离的计算正常,并且在我调用以下命令时有效。

\App\Address::nearBy()->get()

【问题讨论】:

  • 你有什么错误吗?
  • 请发cars关系。
  • @JonasStaudenmeir 您可以跳过汽车关系,查询是相同的想法,但不是将汽车添加到响应中 - 这是一个hasmany关系。
  • @ChamaraAbeysekara 不,查询有效,但它根本不是按位置距离排序的。
  • @user1469734 如果它与 \App\Address::nearBy()->get() 一起使用,那么您似乎在 scopeNearBy 函数中错误地映射了距离。如果是,那么您能否也提供给我们相关的模型文件?这将帮助我找到问题。

标签: laravel laravel-5 eloquent laravel-query-builder


【解决方案1】:

您必须将位置表加入公司查询,然后您可以按距离订购。

【讨论】:

  • 这个。多年来,我希望通过 Eloquent 的简单 orderBy 来解决这个问题,但每次我最终都会像这样进行连接和排序。今天,老实说,我认为这是本地做到这一点的唯一方法。
【解决方案2】:

在我看来,唯一的方法是在添加每个位置时存储它们的距离。然后,当然,您可以按距离订购它们。

【讨论】:

    【解决方案3】:

    如果您可以使用该软件包找到距离。将距离附加到您的公司模型。

    然后你就可以轻松的在控制器中对集合进行排序了

    参考https://laravel.com/docs/5.8/collections#method-sortby

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2021-01-16
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2018-09-16
      相关资源
      最近更新 更多