Я как бы потерян, я пытаюсь подсчитать расстояние и выполнить миссию, ближайшую к зарегистрированному пользователю. Проблема в том, что мои lat и lng находятся в другой таблице (Buildings
), которая определяется как отношение в Mission
. Я использую QueryBuilder Laravel/Lumen для получения записей из базы данных.Eloquent sort by relationship column
$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?
Ах да, спасибо. Это сработало! Но пришлось изменить порядок tho на 'Mission :: select (...)' Спасибо! – mertje