Eloquent Laravel 按相关模型排序分页查询
Posted
技术标签:
【中文标题】Eloquent Laravel 按相关模型排序分页查询【英文标题】:Eloquent Laravel sort paginate query by related model 【发布时间】: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 函数中错误地映射了距离。如果是,那么您能否也提供给我们相关的模型文件?这将帮助我找到问题。
【参考方案1】:
您必须将位置表加入公司查询,然后您可以按距离订购。
【讨论】:
这个。多年来,我希望通过 Eloquent 的简单 orderBy 来解决这个问题,但每次我最终都会像这样进行连接和排序。今天,老实说,我认为这是本地做到这一点的唯一方法。【参考方案2】:在我看来,唯一的方法是在添加每个位置时存储它们的距离。然后,当然,您可以按距离订购它们。
【讨论】:
【参考方案3】:如果您可以使用该软件包找到距离。将距离附加到您的公司模型。
然后你就可以轻松的在控制器中对集合进行排序了
参考https://laravel.com/docs/5.8/collections#method-sortby
【讨论】:
以上是关于Eloquent Laravel 按相关模型排序分页查询的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 模型按局部列和关系模型列值排序