laravel - Laravel:按关系 AS 列按父级排序
问题描述
我的一个Location
模型具有以下范围。就我而言, a与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
它不存在。我该如何解决?
解决方案
推荐阅读
- java - ArrayList 添加的项目被 for 循环中的下一个项目替换
- python - 如何在 Python 中生成 JSON 格式的 Kafka 消息
- python - 无法将字符串转换为浮点数:'10,000' 使用 Django
- javascript - NodeJS 异步连接到 Mongo DB
- perforce - 是什么导致此错误消息 [错误]:“客户端‘主机’未知 - 使用‘客户端’命令创建它。”?
- python - Numpy 计算 3D 矩阵内部数组的点积
- iot - Azure 逻辑应用:从 IoT 中心消息中读取遥测数据作为动态内容
- java - Flink:包装可执行的非 flink jar 以在 flink 集群中运行
- python - 健壮的连续 TCP 连接(python 套接字)
- python-3.x - 使用 discord.py 编辑消息