Итак, эта проблема немного сложна, и я не знаю, нахожусь ли я вообще на правильном пути к решению.
У меня есть несколько таблиц в базе данных, которые я хочу использовать в качестве API. Я создал ресурс для таблицы, которая возвращает поля из разных таблиц.
У меня есть следующие файлы:
- Http/Table.php (модель)
- Http/Resources/TableResource.php (ресурс)
- Http/Controller/Tablecontroller.php (Контроллер)
- route/api.php (файл маршрута)
Файл ресурсов для таблицы выглядит так:
public function toArray($request)
{
'id' => $this->id,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'name' => $this->name,
'website' => $this->website,
'categories' => CategoryResource::collection($this->categories),
'photos' => PhotoResource::collection($this->photos),
}
Как видите, ресурс ссылается на разные ресурсы и создает для него один объект.
Мой контроллер имеет две функции для обслуживания всех данных и данных с определенным идентификатором.
Это выглядит так:
public function showAll()
{
return TableResource::collection(TableApi::all());
}
public function show($id)
{
return new TableResource(TableApi::find($id));
}
И, наконец, я сделал несколько маршрутов:
Route::get('/table', 'TableController@showAll');
Route::get('/table/{id}', 'TableController@show');
Все работает до этого момента.
Теперь следующий сценарий: я хочу, чтобы данные из таблицы фильтровались не только по id, но и по имени одной из таблиц, на которые ссылаются. Итак, в основном мне нужны все записи, где категория->название «Тест».
Возможно ли это вообще с моим подходом?
TableApi
и вы объявили связь с модельюCategory
, вы можете сделать что-то вродеTableApi::where('id', $id)->whereHas('categories', function($query) {$query->where('category.name', 'Test')})->first()
. - person Camilo   schedule 10.11.2017with()
. Я добавил правильный ответ. - person Camilo   schedule 10.11.2017