$videos * * @method static AudioFactory factory(...$parameters) */ class Audio extends BaseModel implements Auditable, HasAggregateViews, SoftDeletable, Streamable { use AggregatesView; use HasAudits; use HasFactory; use SoftDeletes; use Submitable; final public const string TABLE = 'audios'; final public const string ATTRIBUTE_BASENAME = 'basename'; final public const string ATTRIBUTE_FILENAME = 'filename'; final public const string ATTRIBUTE_ID = 'audio_id'; final public const string ATTRIBUTE_LINK = 'link'; final public const string ATTRIBUTE_MIMETYPE = 'mimetype'; final public const string ATTRIBUTE_PATH = 'path'; final public const string ATTRIBUTE_SIZE = 'size'; final public const string RELATION_VIDEOS = 'videos'; /** * The table associated with the model. * * @var string */ protected $table = Audio::TABLE; /** * The primary key associated with the table. * * @var string */ protected $primaryKey = Audio::ATTRIBUTE_ID; /** * The event map for the model. * * Allows for object-based events for native Eloquent events. * * @var array */ protected $dispatchesEvents = [ 'created' => AudioCreated::class, 'deleted' => AudioDeleted::class, 'forceDeleting' => AudioForceDeleting::class, 'restored' => AudioRestored::class, 'updated' => AudioUpdated::class, ]; /** * The attributes that are mass assignable. * * @var list */ protected $fillable = [ Audio::ATTRIBUTE_BASENAME, Audio::ATTRIBUTE_FILENAME, Audio::ATTRIBUTE_MIMETYPE, Audio::ATTRIBUTE_PATH, Audio::ATTRIBUTE_SIZE, ]; /** * The accessors to append to the model's array form. * * @var list */ protected $appends = [ Audio::ATTRIBUTE_LINK, ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ Audio::ATTRIBUTE_SIZE => 'int', ]; } protected function getLinkAttribute(): ?string { if ($this->hasAttribute($this->getRouteKeyName()) && $this->exists) { return route('audio.show', $this); } return null; } /** * Get the route key for the model. * * @noinspection PhpMissingParentCallCommonInspection */ public function getRouteKeyName(): string { return Audio::ATTRIBUTE_BASENAME; } public function getName(): string { return $this->basename; } public function getSubtitle(): string { return $this->path(); } public function path(): string { return $this->path; } public function basename(): string { return $this->basename; } public function mimetype(): string { return $this->mimetype; } public function size(): int { return $this->size; } /** * @return HasMany */ public function videos(): HasMany { return $this->hasMany(Video::class, Video::ATTRIBUTE_AUDIO); } }