*/ protected $fillable = [ 'name', 'slug', 'color', 'description', ]; /** * Get the products that have this tag. */ public function products(): BelongsToMany { return $this->belongsToMany(Product::class); } /** * Generate a unique slug for the tag based on its name. */ public static function generateUniqueSlug(string $name, ?int $excludeId = null): string { $slug = Str::slug($name); $originalSlug = $slug; $count = 1; // Keep appending numbers until we find a unique slug $query = static::where('slug', $slug); if ($excludeId) { $query->where('id', '!=', $excludeId); } while ($query->exists()) { $slug = $originalSlug . '-' . $count; $count++; $query = static::where('slug', $slug); if ($excludeId) { $query->where('id', '!=', $excludeId); } } return $slug; } /** * Get the route key for the model. */ public function getRouteKeyName(): string { return 'slug'; } }