RegistrationFieldType::class, 'options' => 'array', 'is_required' => 'boolean', 'is_portal_visible' => 'boolean', 'is_admin_only' => 'boolean', 'is_filterable' => 'boolean', 'sort_order' => 'integer', 'display_width' => FieldDisplayWidth::class, ]; } public function event(): BelongsTo { return $this->belongsTo(Event::class); } public function personFieldValues(): HasMany { return $this->hasMany(PersonFieldValue::class, 'registration_form_field_id'); } /** @return array|null */ public function getNormalizedOptionsAttribute(): ?array { if ($this->options === null) { return null; } return collect($this->options)->map(function (mixed $option): array { if (is_string($option)) { return ['label' => $option, 'description' => null]; } return [ 'label' => $option['label'] ?? (string) $option, 'description' => $option['description'] ?? null, ]; })->toArray(); } public function isMultiValue(): bool { return $this->field_type->isMultiValue(); } public function scopeOrdered(Builder $query): Builder { return $query->orderBy('sort_order'); } public function scopePortalVisible(Builder $query): Builder { return $query->where('is_portal_visible', true)->where('is_admin_only', false); } }