'boolean', ]; public function slots(): HasMany { return $this->hasMany(Slot::class); } public function activeSlots(): HasMany { return $this->hasMany(Slot::class)->where('is_active', true); } /** * Beziehung zum Mandanten */ public function tenant() { return $this->belongsTo(Tenant::class); } /** * Generiere einen eindeutigen Slug für diesen Mandanten */ public function generateSlug($name = null, $tenantId = null) { $name = $name ?: $this->name; $tenantId = $tenantId ?: $this->tenant_id; $baseSlug = \Illuminate\Support\Str::slug($name); $slug = $baseSlug; $counter = 1; // Prüfe auf eindeutigen Slug innerhalb des Mandanten while (static::where('tenant_id', $tenantId) ->where('slug', $slug) ->where('id', '!=', $this->id ?? 0) ->exists()) { $slug = $baseSlug . '-' . $counter; $counter++; } return $slug; } /** * Boot-Method für automatische Slug-Generierung */ protected static function boot() { parent::boot(); static::creating(function ($machine) { if (empty($machine->slug)) { $machine->slug = $machine->generateSlug($machine->name, $machine->tenant_id); } }); static::updating(function ($machine) { if ($machine->isDirty('name') && empty($machine->slug)) { $machine->slug = $machine->generateSlug($machine->name, $machine->tenant_id); } }); } /** * Route Model Binding basierend auf Mandant und machine_number */ public function getRouteKeyName() { return 'machine_number'; } }