'array', 'expire_day' => 'integer', 'minute' => 'integer', 'rate' => 'decimal:2', ]; // 学习类型常量 const TYPE_VISITOR = 1; // 访客 const TYPE_VISITOR_CAR = 2; // 访客车辆 const TYPE_LOGISTICS_CAR = 3; // 物流车辆 /** * 关联学习题目 */ public function studyAsks() { return $this->hasMany(StudyAsk::class, 'study_id'); } /** * 获取学习类型文本 */ public function getTypeTextAttribute() { $types = [ self::TYPE_VISITOR => '访客', self::TYPE_VISITOR_CAR => '访客车辆', self::TYPE_LOGISTICS_CAR => '物流车辆', ]; return $types[$this->type] ?? '未知'; } /** * 获取文件列表 */ public function getFilesAttribute() { if (!$this->file) { return []; } return Upload::whereIn('id', $this->file)->get(); } /** * 检查学习是否有效 */ public function isValid() { return $this->expire_day > 0; } /** * 获取学习有效期(天数) */ public function getExpireDays() { return $this->expire_day ?? 0; } /** * 获取最低学习时间(分钟) */ public function getMinute() { return $this->minute ?? 0; } /** * 获取通过正确率 */ public function getPassRate() { return $this->rate ?? 0; } /** * 获取随机题目 */ public function getRandomQuestions($limit = 10) { return $this->studyAsks() ->inRandomOrder() ->limit($limit) ->get(); } /** * 检查学习内容是否完整 */ public function isComplete() { return !empty($this->name) && !empty($this->content) && $this->studyAsks()->count() > 0; } /** * 获取学习统计信息 */ public function getStatistics() { return [ 'total_questions' => $this->studyAsks()->count(), 'single_choice' => $this->studyAsks()->where('type', StudyAsk::TYPE_SINGLE)->count(), 'multiple_choice' => $this->studyAsks()->where('type', StudyAsk::TYPE_MULTIPLE)->count(), 'expire_days' => $this->getExpireDays(), 'minute' => $this->getMinute(), 'pass_rate' => $this->getPassRate(), ]; } }