CourseVersionStatus::class, 'settings' => 'array', 'review_submitted_at' => 'immutable_datetime', 'published_at' => 'immutable_datetime', 'scheduled_publish_at' => 'immutable_datetime', 'scheduled_unpublish_at' => 'immutable_datetime', 'unpublished_at' => 'immutable_datetime', ]; } protected static function booted(): void { static::updating(function (self $version) { if ($version->getOriginal('status') === CourseVersionStatus::Published->value) { throw new DomainException('Published learning path versions are immutable.'); } }); } public function path(): BelongsTo { return $this->belongsTo(LearningPath::class, 'learning_path_id'); } public function items(): HasMany { return $this->hasMany(LearningPathItem::class)->orderBy('position'); } }