plainInviteToken = Str::random(128); $hashedToken = hash('sha256', $model->plainInviteToken); $model->invite_token = $hashedToken; }); self::created(function (self $model) { $model->notify(new InviteToTeam); }); } public function team(): BelongsTo { return $this->belongsTo(Team::class); } public function invitedBy(): BelongsTo { return $this->belongsTo(User::class, 'invited_by_user_id'); } public function plainInviteToken(): ?string { return $this->plainInviteToken; } /** * Route notifications for the mail channel. * * @return array|string */ public function routeNotificationForMail(Notification $notification): array|string { return $this->invited_email; } #[Scope] protected function findByPlainToken(Builder $query, string $token): Builder { return $query->where('invite_token', hash('sha256', $token)); } }