Две модели:
Category - id,title
CategoryDescription - category_id, description, slug
Есть базовый репозиторий
abstract class BaseRepository implements RepositoryInterface
{
protected $model;
protected $with = [];
public function create(array $attributes): Model
{
$model = $this->model->create($attributes);
return $model;
}
public function update(int $id, array $attributes): void
{
$this->model->find($id)->update($attributes);
}
public function updateOrCreate(int $id, array $attributes): void
{
$this->model->updateOrCreate(['id' => $id], $attributes);
}
public function find(int $id): ?Model
{
return $this->model->find($id);
}
public function delete(int $id): void
{
$this->model->find($id)->delete();
}
public function with($relations)
{
if (is_string($relations)) {
$this->with = explode(',', $relations);
return $this;
}
$this->with = is_array($relations) ? $relations : [];
return $this;
}
protected function query()
{
return $this->model->newQuery()->with($this->with);
}
}
есть репозиторий категории CategoryRepository и репозиторий описаний для категории CategoryDescriptionRepository
Маршрут имеет такую структуру
Route::prefix('category')->group(function () {
Route::get('/', [CategoryController::class, 'index']);
Route::post('/', [CategoryController::class, 'store']);
Route::prefix('{id}')->group(function () {
Route::get('/', [CategoryController::class, 'show']);
Route::put('/', [CategoryController::class, 'update']);
Route::delete('/', [CategoryController::class, 'destroy']);
Route::prefix('description')->group(function () {
Route::get('/', [CategoryDescriptionController::class, 'index']);
Route::post('/', [CategoryDescriptionController::class, 'store']);
Route::get('/{descriptionId}', [CategoryDescriptionController::class, 'show']);
Route::put('/{descriptionId}', [CategoryDescriptionController::class, 'update']);
Route::delete('/{descriptionId}', [CategoryDescriptionController::class, 'destroy']);
});
});
});
как правильно в репозитории CategoryDescriptionRepository сделать удаление с проверкой, чтобы проверить id описания и категорию к которой оно привязана