tags management

This commit is contained in:
Doar Mihai
2026-02-21 16:12:57 +02:00
parent 898bddf614
commit 76d888760c
13 changed files with 850 additions and 2 deletions
+65
View File
@@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Str;
class Tag extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
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';
}
}