slug)) { $artist->slug = $artist->generateUniqueSlug($artist->name); } }); } protected $fillable = [ 'organisation_id', 'name', 'slug', 'default_genre_id', 'default_draw', 'star_rating', 'home_base_country', 'agent_company_id', 'notes', ]; protected function casts(): array { return [ 'default_draw' => 'integer', 'star_rating' => 'integer', ]; } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logOnly(['name', 'slug', 'default_genre_id', 'default_draw', 'agent_company_id']) ->logOnlyDirty() ->dontLogIfAttributesChangedOnly(['updated_at']) ->useLogName('artist'); } public function tapActivity(Activity $activity, string $eventName): void { $properties = $activity->properties?->toArray() ?? []; $properties['organisation_id'] = $this->organisation_id; $activity->properties = collect($properties); } private function generateUniqueSlug(string $name): string { $base = Str::slug($name); $slug = $base; $suffix = 2; while ( self::withoutGlobalScope(OrganisationScope::class) ->withTrashed() ->where('organisation_id', $this->organisation_id) ->where('slug', $slug) ->exists() ) { $slug = "{$base}-{$suffix}"; $suffix++; } return $slug; } public function organisation(): BelongsTo { return $this->belongsTo(Organisation::class); } public function defaultGenre(): BelongsTo { return $this->belongsTo(Genre::class, 'default_genre_id'); } public function agentCompany(): BelongsTo { return $this->belongsTo(Company::class, 'agent_company_id'); } public function contacts(): HasMany { return $this->hasMany(ArtistContact::class); } public function engagements(): HasMany { return $this->hasMany(ArtistEngagement::class); } }