fix(spaces): resolve inviter name without a non-null relation assumption

Larastan treats the invitedBy belongsTo as always present, so the nullsafe
access read as unnecessary. Resolve the inviter name via a scalar query keyed on
the nullable invited_by_id instead — correct when the inviter's account was
deleted (nullOnDelete) and Larastan-clean. Drops the unused invitation view key.
This commit is contained in:
Víctor Falcón 2026-07-07 08:47:13 +02:00
parent dd43b88fff
commit ecd1a07a0b
2 changed files with 5 additions and 3 deletions

View File

@ -3,6 +3,7 @@
namespace App\Mail;
use App\Models\SpaceInvitation;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
@ -30,7 +31,7 @@ class SpaceInvitationMail extends Mailable implements ShouldQueue
{
return new Envelope(
subject: __(':inviter invited you to :space on Whisper Money', [
'inviter' => $this->invitation->invitedBy?->name ?? __('Someone'),
'inviter' => User::query()->whereKey($this->invitation->invited_by_id)->value('name') ?? __('Someone'),
'space' => $this->invitation->space->name,
]),
);
@ -41,9 +42,8 @@ class SpaceInvitationMail extends Mailable implements ShouldQueue
return new Content(
markdown: 'mail.space-invitation',
with: [
'invitation' => $this->invitation,
'spaceName' => $this->invitation->space->name,
'inviterName' => $this->invitation->invitedBy?->name ?? __('A Whisper Money user'),
'inviterName' => User::query()->whereKey($this->invitation->invited_by_id)->value('name') ?? __('A Whisper Money user'),
'acceptUrl' => route('spaces.invitations.accept', $this->invitation->token),
],
);

View File

@ -16,6 +16,8 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property string $token
* @property ?Carbon $expires_at
* @property ?Carbon $accepted_at
* @property-read Space $space
* @property-read ?User $invitedBy
*/
class SpaceInvitation extends Model
{