'boolean', 'order' => 'integer', ]; public function theme(): BelongsTo { return $this->belongsTo(Theme::class); } protected $appends = ['image_url', 'video_url', 'sound_url', 'has_video']; public function getImageUrlAttribute(): ?string { return $this->image_path ? asset('storage/' . $this->image_path) : null; } public function getVideoUrlAttribute(): ?string { return $this->video_path ? asset('storage/' . $this->video_path) : null; } public function getSoundUrlAttribute(): ?string { return $this->sound_path ? asset('storage/' . $this->sound_path) : null; } // Whether this scene can be shown as a video (the "تبدیل صحنه به ویدیو" toggle). public function getHasVideoAttribute(): bool { return !empty($this->video_path); } }