'datetime', 'updated_at' => 'datetime', 'image_count' => 'integer', 'total_questions' => 'integer', ]; public function questions(): HasMany { return $this->hasMany(OCRQuestionResult::class, 'ocr_record_id', 'id'); } public function student() { return $this->belongsTo(Student::class, 'user_id', 'student_id'); } public function getStatusBadgeAttribute(): string { return match ($this->status) { 'pending' => '待处理', 'processing' => '处理中', 'completed' => '已完成', 'failed' => '失败', default => '未知', }; } // 兼容性方法:获取 student_id public function getStudentIdAttribute(): ?string { return $this->user_id; } // 兼容性方法:设置 student_id public function setStudentIdAttribute(?string $value): void { $this->attributes['user_id'] = $value; } public function getImageUrlAttribute(): string { if ($this->image_path && file_exists(public_path($this->image_path))) { return asset($this->image_path); } return ''; } public function getProgressPercentageAttribute(): int { if ($this->total_questions === 0) { return 0; } return intval(($this->processed_questions / $this->total_questions) * 100); } public function getPaperTypeLabelAttribute(): string { return match($this->paper_type) { 'unit_test' => '单元测试', 'midterm' => '期中考试', 'final' => '期末考试', 'homework' => '家庭作业', 'quiz' => '随堂测验', 'other' => '其他', default => '未分类', }; } }