IdentityMatchMethod::class, 'confidence' => IdentityMatchConfidence::class, 'status' => IdentityMatchStatus::class, 'match_details' => 'array', 'confirmed_at' => 'datetime', 'dismissed_at' => 'datetime', 'reverted_at' => 'datetime', 'resolved_at' => 'datetime', ]; } public function person(): BelongsTo { return $this->belongsTo(Person::class); } public function matchedUser(): BelongsTo { return $this->belongsTo(User::class, 'matched_user_id'); } public function resolvedBy(): BelongsTo { return $this->belongsTo(User::class, 'resolved_by_user_id'); } public function confirmedBy(): BelongsTo { return $this->belongsTo(User::class, 'confirmed_by_user_id'); } public function dismissedBy(): BelongsTo { return $this->belongsTo(User::class, 'dismissed_by_user_id'); } public function revertedBy(): BelongsTo { return $this->belongsTo(User::class, 'reverted_by_user_id'); } public function scopePending(Builder $query): Builder { return $query->where('status', IdentityMatchStatus::PENDING); } public function scopeConfirmed(Builder $query): Builder { return $query->where('status', IdentityMatchStatus::CONFIRMED); } public function scopeDismissed(Builder $query): Builder { return $query->where('status', IdentityMatchStatus::DISMISSED); } public function scopeForEvent(Builder $query, string $eventId): Builder { return $query->whereHas('person', fn (Builder $q) => $q->where('event_id', $eventId)); } }