【发布时间】:2016-06-21 03:18:25
【问题描述】:
我有点迷路了,我正在尝试计算距离登录用户最近的距离和排序任务。问题是我的 lat 和 lng 在另一个表(Buildings)中,它被定义为Mission 中的关系。
我正在使用 Laravel/Lumen 的 QueryBuilder 从数据库中获取记录。
$orderBy = "DEGREES(ACOS(COS(RADIANS($lat)) * COS(RADIANS(lat)) * COS(RADIANS($lng) - RADIANS(lng)) + SIN(RADIANS($lat)) * SIN(RADIANS(lat))))";
return DB::table('buildings')
->join('missions', 'building_id', '=', 'buildings.id')
->select('missions.*', 'buildings.lat', 'buildings.lng')
->orderBy(DB::raw($orderBy))
->get();
结果:
{
"id": 5,
"building_id" : 2
...
"created_at": "2016-03-07 07:35:19",
"updated_at": "2016-03-07 07:35:19",
"lat": 33,
"lng": 55
}
但这会返回非常丑陋的响应并且难以处理。由于Mission 与Building 有关系,我也想将该表加载到响应中(而不是显示 building_id)。但是对于DB:Table(),这是不可能的(?)
{
"id": 5,
"building_id": 2
"building" : {
"id": 2
...
"lat": 33,
"lng": 55
}
...
}
这是我想要得到的响应,并按 lat/lng 排序。 有什么方法可以用 Eloquents 模型做到这一点?
【问题讨论】: