$products * @method static \Database\Factories\RecipeFactory factory($count = null, $state = []) * @mixin \Eloquent */ class Recipe extends Model { /** @use HasFactory<\Database\Factories\RecipeFactory> */ use HasFactory; protected $fillable = [ 'seo_title', 'seo_description', 'picture', 'picture_alt', 'picture_title', 'name', 'product_range', 'consomption_time', 'inspiration', 'season', 'description', 'details', 'ingredients_list', 'preparation_steps', 'tips_and_advices' ]; protected $casts = [ 'product_range' => ProductRange::class, 'consomption_time' => ConsumptionTime::class, 'inspiration' => Inspiration::class, 'season' => Season::class, ]; #[\Override] protected static function booted(): void { static::saving(function (self $model): void { self::manageFields($model); }); static::deleting(function (self $model): void { FileStorageHelper::removeFile($model, 'picture'); }); } /** @return \Illuminate\Database\Eloquent\Relations\BelongsToMany<\App\Models\Product,$this> */ public function products(): BelongsToMany { return $this->belongsToMany(Product::class); } private static function manageFields(self $model): void { self::assertNameIsUnique($model->name, $model->id); $model->slug = Str::slug($model->name); $model->picture = FileStorageHelper::storeFile($model, $model->picture, true); } private static function assertNameIsUnique(?string $name, ?int $id = null): void { $table = new self()->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'name', $name, $id); ToolboxHelper::assertFieldIsUnique($table, 'slug', Str::slug($name ?? ''), $id); } }