hash ??= str()->random(16); }); } protected function casts(): array { return [ 'kind' => OperationKind::class, 'status' => OperationStatus::class, 'started_at' => 'datetime', 'finished_at' => 'datetime', ]; } public function parent(): BelongsTo { return $this->belongsTo(Operation::class, 'parent_id'); } public function children(): HasMany { return $this->hasMany(Operation::class, 'parent_id'); } public function steps(): HasMany { return $this->hasMany(OperationStep::class); } public function target(): MorphTo { return $this->morphTo('target'); } }