The configuration values that should be cast to native types */ protected array $valueCasts = [ 'buildup_start' => 'datetime_human', 'event_start' => 'datetime_human', 'event_end' => 'datetime_human', 'teardown_end' => 'datetime_human', 'last_metrics' => 'datetime', ]; /** @var bool It could be interesting to know when a value changed the last time */ public $timestamps = true; // phpcs:ignore /** * Value accessor */ public function getValueAttribute(mixed $value): mixed { $value = $value ? $this->fromJson($value) : null; /** @see \Illuminate\Database\Eloquent\Concerns\HasAttributes::castAttribute */ if (!empty($value)) { return match ($this->getValueCast($this->name)) { 'datetime_human' => Carbon::make($value), 'datetime' => Carbon::createFromFormat(Carbon::ISO8601, $value), default => $value, }; } return $value; } /** * Value mutator * * @return static */ public function setValueAttribute(mixed $value): static { if (!empty($value)) { $value = match ($this->getValueCast($this->name)) { /** @var Carbon $value */ 'datetime_human' => $value->toDateTimeString('minute'), /** @var Carbon $value */ 'datetime' => $value->toIso8601String(), default => $value, }; } $value = $this->castAttributeAsJson('value', $value); $this->attributes['value'] = $value; return $this; } /** * Check if the value has to be casted */ protected function getValueCast(string $value): ?string { return isset($this->valueCasts[$value]) ? $this->valueCasts[$value] : null; } }