【发布时间】:2019-04-28 00:25:53
【问题描述】:
我是 laravel 的新手,使用 laravel 5.6,我正在研究 API。在 API 结果中,我希望所有在买方 50 英里半径范围内的卖方都有分页。 到目前为止,这是我尝试过的:
$lat = Auth::user()->latitude;
$long = Auth::user()->longitude;
$products = DB::table('products')
->select(DB::raw('title, (
6371 * acos( cos( radians({$lat})
) * cos(
radians( `latitude` )
) * cos(
radians( `longitude` ) - radians({$long})
) + sin(
radians({$lat})
) * sin( radians( `latitude` ) )
)
) AS distance'))
->where('distance', '<', 50)
->paginate(20);
var_dump($products);
但我找不到解决方案。 请帮忙。提前致谢。
【问题讨论】:
-
尝试使用
->having('distance', '<', 50)。 -
你知道现代版本的 MySQL 有这个用例的
POINT数据类型,不是吗?如果您使用它而不是将纬度和经度存储为数字,这将容易得多。 -
不,我不知道。我需要调查一下。如果你能给我一个帮助的例子,那将是很大的帮助。
-
@Ashish 好吧,我之前只用 PostgreSQL 做过,所以我不能给出具体的例子,但我在github.com/grimzy/laravel-mysql-spatial 找到了一个 Laravel 包,旨在复制包的功能我用过,所以我建议你看看。
-
好的,非常感谢