*/ protected $fillable = [ VideoScript::ATTRIBUTE_PATH, VideoScript::ATTRIBUTE_VIDEO, ]; /** * The event map for the model. * * Allows for object-based events for native Eloquent events. * * @var array */ protected $dispatchesEvents = [ 'created' => VideoScriptCreated::class, 'deleted' => VideoScriptDeleted::class, 'forceDeleting' => VideoScriptForceDeleting::class, 'restored' => VideoScriptRestored::class, 'updated' => VideoScriptUpdated::class, ]; /** * The table associated with the model. * * @var string */ protected $table = VideoScript::TABLE; /** * The primary key associated with the table. * * @var string */ protected $primaryKey = VideoScript::ATTRIBUTE_ID; /** * The accessors to append to the model's array form. * * @var list */ protected $appends = [ VideoScript::ATTRIBUTE_LINK, ]; /** * The link of the video script. * * @return string|null */ public function getLinkAttribute(): ?string { // Necessary for 'make' factories. if ($this->hasAttribute(VideoScript::ATTRIBUTE_ID)) { return route('videoscript.show', $this); } return null; } /** * Get name. * * @return string */ public function getName(): string { return $this->path; } /** * Get subtitle. * * @return string */ public function getSubtitle(): string { return $this->video->getName(); } /** * Get the eager loads needed to the subtitle. * * @return array */ public static function getEagerLoadsForSubtitle(): array { return [ VideoScript::RELATION_VIDEO, ]; } /** * Get the video that owns the script. * * @return BelongsTo */ public function video(): BelongsTo { return $this->belongsTo(Video::class, VideoScript::ATTRIBUTE_VIDEO); } /** * Get the schema for the model. * * @return Schema */ public function schema(): Schema { return new ScriptSchema(); } }