В вашем коде происходит несколько странных вещей. Трудно точно понять, что не так со строкой $ latFrom, поскольку похоже, что $ lat должен быть объектом, просто смотрящим на ваш код. Я предполагаю, что он возвращает null или устанавливается в null до того, как дойдет до функции расстояния.
Вы можете проверить это, выполнив dd($lat)
и посмотрев, что на самом деле возвращается из контроллера. Значение будет тупым прямо на экране. Вы можете выгрузить журнал запросов, чтобы увидеть, какой запрос на самом деле выполняется, а также для дальнейшего устранения неполадок.
Пример варианта сброса запроса в Laravel 7
Но в этом случае я бы просто немного реорганизовал, так как вам вообще не нужно выполнять вызов базы данных для $ lon и $ lat. Это все тот же пользователь, и laravel в любом случае уже заполняет для вас пользователя auth, который можно получить с помощью команды Auth :: user (). $user = Auth::user();
Тогда $ user-> lat и $ user-> lon будут иметь широту и долготу из базы данных.
В качестве альтернативы вы можете использовать Auth::user()->lat
и Auth::user()->lon
без сохранения ее сначала в отдельной пользовательской переменной.
В вашем автомобиле l oop:
foreach ($vehicles as $vehicle) {
$distance = havesineGreatCircleDistance($user->lat, $user->lon, $vehicle->lat, $vehicle->lon);
}
Примечание. Я не стал устанавливать переменную перед тем, как поместить ее в функцию. поскольку от этого ничего не выиграет, если только вы по какой-то причине не хотите ссылаться на них с этими именами после этой точки.
Затем в функции
$latFrom = deg2rad($lat);
$lonFrom = deg2rad($lon);
Обратите внимание на разницу здесь с просто выполняю $ lat вместо $ lat-> lat. При использовании этого метода они не будут объектами, а просто значениями, поэтому вы не захотите ссылаться на них как на объекты.