#eager-loading #laravel-5.7 #nested-resources
#быстрая загрузка #laravel-5.7 #вложенные ресурсы
Вопрос:
Моя схема БД среди прочего включает сводную таблицу:
user_workshop
- id
- user_id
- workshop_id
- accepted_at
- rejected_at
// other fields...
с соответствующими моделями User
amp; Workshop
и belongsToMany
взаимосвязями в каждой.
Попытка получить к ним доступ с помощью вложенных ресурсов:
Route::apiResource('users', 'UserController');
Route::apiResource('users.workshops', 'WorkshopController');
работает нормально, но если я добавлю поле (в toArray
методе), которое будет добавлено только в том случае, если pivot загружен, то это поле никогда не будет добавлено в ответ.
Например. рассмотрим следующий WorkshopResource
ресурс:
class Workshop extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param IlluminateHttpRequest $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
// other fields ...
'conditional_field' => $this->whenPivotLoaded('user_workshop', function() {
return 'works';
}),
];
}
}
conditional_field
Не добавляется, например, в следующем запросе:
https://<tld>/api/users/1/workshops
в то время как остальные поля есть.
Любая помощь с этим?
Комментарии:
1. это правила проверки?
2. нет, это поля ресурса API