*/ use HasFactory; public const STATUS_PUBLISHED = 'published'; public const STATUS_DRAFT = 'draft'; protected $fillable = [ 'display_id', 'status', 'published_at', 'published_by', 'notes', ]; protected function casts(): array { return [ 'published_at' => 'datetime', ]; } public function display(): BelongsTo { return $this->belongsTo(Display::class); } public function publisher(): BelongsTo { return $this->belongsTo(User::class, 'published_by'); } /** * @return HasMany */ public function items(): HasMany { return $this->hasMany(DisplayPlaylistItem::class)->orderBy('sort_order'); } /** * Die der Bespielung zugeordneten Module in korrekter Reihenfolge. */ public function modules(): BelongsToMany { return $this->belongsToMany( DisplayVersion::class, 'display_playlist_items', 'display_playlist_id', 'display_version_id' ) ->withPivot(['sort_order', 'id']) ->withTimestamps() ->orderByPivot('sort_order'); } public function isPublished(): bool { return $this->status === self::STATUS_PUBLISHED; } public function isDraft(): bool { return $this->status === self::STATUS_DRAFT; } public function scopePublished(Builder $query): Builder { return $query->where('status', self::STATUS_PUBLISHED); } public function scopeDraft(Builder $query): Builder { return $query->where('status', self::STATUS_DRAFT); } }