false, 'is_locked' => false, 'checksum' => null, 'bytes' => 0, 'upload_id' => null, ]; protected $guarded = ['id', 'created_at', 'updated_at', 'deleted_at']; public static array $validationRules = [ 'server_id' => 'bail|required|numeric|exists:servers,id', 'uuid' => 'required|uuid', 'is_successful' => 'boolean', 'is_locked' => 'boolean', 'name' => 'required|string', 'ignored_files' => 'array', 'disk' => 'required|string', 'checksum' => 'nullable|string', 'bytes' => 'numeric', 'upload_id' => 'nullable|string', ]; protected function casts(): array { return [ 'id' => 'int', 'is_successful' => 'bool', 'is_locked' => 'bool', 'ignored_files' => 'array', 'bytes' => 'int', 'completed_at' => 'immutable_datetime', 'created_at' => 'immutable_datetime', 'updated_at' => 'immutable_datetime', 'deleted_at' => 'immutable_datetime', ]; } public function server(): BelongsTo { return $this->belongsTo(Server::class); } /** * Returns a query filtering only non-failed backups for a specific server. */ public function scopeNonFailed(Builder $query): void { $query->whereNull('completed_at')->orWhere('is_successful', true); } }