*/ protected function casts(): array { return [ Sanction::ATTRIBUTE_NAME => 'string', ]; } public function getName(): string { return $this->name; } #[Scope] protected function expired(Builder $query): Builder { $tableName = Config::string('prohibition.table_names.model_sanctions'); /** @phpstan-ignore-next-line */ return $query->where("$tableName.expires_at", '<', now()); } #[Scope] protected function notExpired(Builder $query): Builder { $tableName = Config::string('prohibition.table_names.model_sanctions'); /** @phpstan-ignore-next-line */ return $query->where("$tableName.expires_at", '>', now()) ->orWhereNull("$tableName.expires_at"); } /** * @return MorphToMany */ public function users(): MorphToMany { /** @var class-string $user */ $user = Config::string('prohibition.models.user'); return $this->morphedByMany( $user, 'user', Config::string('prohibition.table_names.model_sanctions'), ); } }