【发布时间】:2021-06-28 02:42:20
【问题描述】:
我正在尝试在 Laravel 上构建一个应用程序。我有一个模型Project,它有id、name、state_id、city_id、latitude、longitude、status和timestamps
我尝试添加一个附近的功能,根据纬度和经度约束找到项目。我的查询是:
$projects = Project::where('projects.status', 'saved')
->selectRaw("*,
( 6371 * acos( cos( radians(?) ) *
cos( radians( latitude ) )
* cos( radians( longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( latitude ) ) )
) AS distance", [request('latitude'), request('longitude'), request('latitude')])->having("distance", "<", request('range')
->with('state', 'city')
->orderBy('projects.updated_at', 'desc')
->paginate(50)
这按预期工作,现在我需要根据上述查询找出与州/城市相关的项目数量,我试过了:
$states = State::withCount(['projects' => function ($q){
$q->selectRaw("*,
( 6371 * acos( cos( radians(?) ) *
cos( radians( latitude ) )
* cos( radians( longitude ) - radians(?)
) + sin( radians(?) ) *
sin( radians( latitude ) ) )
) AS distance", [request('latitude'), request('longitude'), request('latitude')])->having("distance", "<", request('range')
}])
->orderBy('states.name', 'desc')->paginate();
MySQL 出现错误
SQLSTATE[42S22]:未找到列:1054 未知列“距离”在“有子句”中(SQL:选择
states.,(从projects中选择计数()@ 987654334@.id=projects.state_id.....
什么是更好的实现方式?
【问题讨论】:
-
我原以为任何可行的方式都“更好”。如果是我,我会从 sql 开始。
标签: php mysql laravel eloquent