TL; DR
Попробуйте это в своем OrderResource
:
use OrderPhoto as OrderPhotoResource;
//
public function toArray($request)
{
return [
"id" => $this->Id,
"photo" => new OrderPhotoResource($this->whenLoaded('OrderPhoto')),
];
}
Пояснение
Как видите, вы уже определяете OrderPhoto
как коллекция ресурсов:
class OrderPhoto extends ResourceCollection // <-- note the extended class
Таким образом, в этом случае вам нужно будет использовать этот класс для создания экземпляра класса и передачи в коллекцию вместо использования статического метода collection
.
Когда вы определяете ресурс API для отдельного объекта, например:
php artisan make:resource PostResource
, вы используете его, как показано ниже:
$post = Post::find(1);
return new PostResource($post);
И если выЧтобы использовать API-ресурс для форматирования набора ресурсов вместо одного, вам нужно сделать следующее:
$posts = Post::all();
return PostResource::collection($posts); // <-- note the ::collection part
Управление метаданными
Если вычтобы иметь полный контроль над возвращенными метаданными в ответе, определите вместо этого пользовательский класс Коллекция ресурсов API .
Создайте класс как коллекцию (добавив в конце «Коллекция»)или используя флаг --collection
):
php artisan make:resource PostResourceCollection
затем, после его настройки:
$posts = Post::all();
return new PostResourceCollection($posts); // <-- instantiating the class