blocks()->with('comparisonResults')->get()->each(function (AcademyLessonBlock $block) use ($lesson): void { if ($lesson->isForceDeleting()) { $block->forceDelete(); return; } $block->delete(); }); }); } protected $fillable = [ 'category_id', 'title', 'slug', 'excerpt', 'content', 'difficulty', 'access_level', 'lesson_type', 'cover_image', 'video_url', 'reading_minutes', 'featured', 'active', 'published_at', 'seo_title', 'seo_description', ]; protected $casts = [ 'reading_minutes' => 'integer', 'featured' => 'boolean', 'active' => 'boolean', 'published_at' => 'datetime', ]; public function scopeActive(Builder $query): Builder { return $query->where('active', true); } public function scopePublished(Builder $query): Builder { return $query->whereNotNull('published_at')->where('published_at', '<=', now()); } public function category(): BelongsTo { return $this->belongsTo(AcademyCategory::class, 'category_id'); } public function progress(): HasMany { return $this->hasMany(AcademyLessonProgress::class, 'lesson_id'); } public function blocks(): HasMany { return $this->hasMany(AcademyLessonBlock::class, 'lesson_id') ->orderBy('sort_order') ->orderBy('id'); } public function activeBlocks(): HasMany { return $this->blocks()->where('active', true); } }