Laravel 5.7 — Как получить доступ к сводной таблице во вложенном ресурсе API?

#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