'decimal:2', ]; /** * 获取难度标签 */ public function getDifficultyLabelAttribute(): string { return match (true) { $this->difficulty <= 0.4 => '基础', $this->difficulty <= 0.7 => '中等', default => '拔高', }; } /** * 获取难度颜色 */ public function getDifficultyColorAttribute(): string { return match (true) { $this->difficulty <= 0.4 => 'success', $this->difficulty <= 0.7 => 'warning', default => 'danger', }; } /** * 获取来源标签 */ public function getSourceLabelAttribute(): string { if (str_contains($this->source ?? '', 'ai::')) { return 'AI 生成'; } if (str_contains($this->source ?? '', 'manual')) { return '手工录入'; } return '未知'; } /** * 关联的知识点名称 */ public function getKnowledgePointNameAttribute(): string { // TODO: 从知识图谱 API 获取知识点名称 // 临时返回 kp_code return $this->kp_code ?? '未知'; } /** * 作用域:按知识点过滤 */ public function scopeByKpCode($query, string $kpCode) { return $query->where('kp_code', $kpCode); } /** * 作用域:按难度过滤 */ public function scopeByDifficulty($query, float $difficulty) { return $query->where('difficulty', $difficulty); } /** * 作用域:按难度范围过滤 */ public function scopeByDifficultyRange($query, float $min, float $max) { return $query->whereBetween('difficulty', [$min, $max]); } /** * 作用域:搜索题目 */ public function scopeSearch($query, string $search) { return $query->where(function ($q) use ($search) { $q->where('stem', 'like', "%{$search}%") ->orWhere('answer', 'like', "%{$search}%") ->orWhere('solution', 'like', "%{$search}%") ->orWhere('question_code', 'like', "%{$search}%"); }); } }