Laravel по умолчанию возвращает экземпляр класса Collection . Это также применяется при запросе элементов отношений.
Теперь, если вы хотите настроить возвращаемые поля (например, скрыть, преобразовать или добавить что-то), вы можете использовать Ресурсы API . Это позволит вам легко трансформировать ваши ответы.
Отметьте этот другой ответ , чтобы помочь вам с ресурсами API.
Обновление
Чтобы реализовать ресурсы API в соответствии с вашими потребностями, нам необходимо:
- Определение классов PostResource и PostMetaResource.
- Настройте их
- Используйте их в контроллере, чтобы вернуть нужные данные в представление / API
Определение классов ресурсов API
php artisan make:resource PostMetaResource
php artisan make:resource PostResource
Настройка
App / Http / Ресурсы / PostMetaResource.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class PostMetaResource extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'key' => $this->key,
'value' => $this->value,
];
}
}
App / Http / Ресурсы / PostResource.php
class PostResource extends Resource
{
use PostMetaResource;
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
// the rest of your fields..
// here is where we load the relationship resource:
'post_metas' => PostMetaResource::collection($this->whenLoaded('post_metas')),
];
}
}
Применение их
use App\Http\Resources\PostResource;
//
public function index(Request $request)
{
$posts = Post::with('post_metas')->get();
return PostResource::collection($posts);
}