Это мой контроллер:
public function branchesNearby($lat, $lng)
{
$branches = Branch::all();
//Calculate distance between each branch and client
//Radius of earth is 6371 KM so multiply the result with radius of earth 6371*pi/180
foreach ($branches as $branch){
$branch['distance'] = sqrt(pow(($branch->lat - $lat), 2) + pow(($branch->lng - $lng), 2)) * 108;
}
//Sort by nearest first
$sortedBranches = $branches->sortBy('distance');
return BranchResource::collection($sortedBranches);
}
Вы можете видеть, что я создал дополнительный атрибут для расчета расстояния между местоположением пользователя и местоположением филиала. Затем я сортирую модель ветки по расстоянию. Однако ответ API, который я получаю: ответ API
Вы можете видеть, что это объект. Мне не нужны клавиши "2", "0" и "1". Мне нужно удалить эту дополнительную упаковку, и мне нужно, чтобы это был массив таких объектов: Правильный API но без сортировки Конечно, именно сортировка заставляет его стать объектом? Я пробовал много других способов, один из них:
$sortedBranches = $collection->sortBy('distance');
$final = $sortedBranches->values()->toJson();
и отправка этого $final в коллекцию ресурсов. Это дает мне ошибку: «вызов функции-члена first () для строки в ресурсах файлов API». Это должно быть что-то маленькое, но мне действительно нужна помощь.
Обновление: раньше не выкладывал свой Ресурс, вот так:
public function toArray($request)
{
return [
'id' => $this->id,
'shop' => $this->shop->name,
'shop_image' => asset('api/images/' . $this->shop->image_file),
'lat' => $this->lat,
'lng' => $this->lng,
'shop_logo' => asset('api/images/' . $this->shop->logo_file),
'distance' => $this->distance . " KM"
];
Ошибка, которую я получаю, если использую:
$sortedBranches = $branches->sortBy('distance')->values()->all();
return BranchResource::collection($sortedBranches);
это: Ошибка
Обновление 3:
Если я не вызываю коллекцию ресурсов и просто вывожу $sortedBranches следующим образом:
return response()->json($sortedBranches, 200);
Здесь формат ответа API правильный, но данные неверны. Вот как это выглядит: $sortedBranches
Есть ли способ манипулировать $sortedBranches и показывать результат, как с BranchResource?
$sortedBranches = $branches->sortBy('distance')->values()->all();
Тогда ваш json должен выглядеть как ваше второе изображение :) Если проблема не вызвана вашей последней оболочкой:BranchResource::collection($sortedBranches);
. Просто попробуй :) - person Rob Biermann   schedule 08.04.2020sortBy
, а на самом деле в частиBranchResource::collect($sortedBranches);
. Вы передаете в нее json (строку), я вижу, что это вызывает ошибку, о которой вы говорите. Чем занимается вашBranchResource
? Может быть, оставить его на секунду, чтобы увидеть прямой вывод$sortedBranches
? - person Rob Biermann   schedule 08.04.2020BranchResource::collect($sortedBranches);
? Если это коллекция, вам может понадобиться запуститьBranchResource::collect($sortedBranches)->values()->all()
в конце. - person Rob Biermann   schedule 08.04.2020dd(BranchResource::collect($sortedBranches));
илиdump(BranchResource::collect($sortedBranches);
между прочим. - person Rob Biermann   schedule 08.04.2020BranchResource::collect($sortedBranches)->values()->all()
сделал свое дело :') Это мой первый настоящий проект на laravel, и спасибо за помощь, я думал, что$sortedBranches = $branches->sortBy('distance')->values()->all();
это то же самое, что иBranchResource::collect($sortedBranches)->values()->all()
- person Jawad Chughtai   schedule 08.04.2020