diff --git a/app/Models/CourseContentEvaluationAsk.php b/app/Models/CourseContentEvaluationAsk.php index d56e85d..e2d1c1c 100644 --- a/app/Models/CourseContentEvaluationAsk.php +++ b/app/Models/CourseContentEvaluationAsk.php @@ -4,11 +4,47 @@ namespace App\Models; class CourseContentEvaluationAsk extends SoftDeletesModel { - protected $casts = ['select_item' => 'json']; + protected $casts = [ + 'select_item' => 'json' + ]; public function courseContent() { return $this->hasOne(CourseContent::class, 'id', 'course_content_id'); } + /** + * 判断是否为多维度题目 + * @return bool + */ + public function isMultiDimension() + { + return $this->edit_input === 'multi_dimension'; + } + + /** + * 获取维度数据(访问器) + * 当题目为多维度题目时返回维度数据,否则返回空数组 + * 注意:访问器会覆盖cast,所以需要手动处理JSON解码 + * @return array + */ + public function getDimensionsAttribute($value) + { + if ($this->isMultiDimension() && !empty($value)) { + // 手动处理JSON解码 + return is_string($value) ? json_decode($value, true) : $value; + } + return []; + } + + /** + * 设置维度数据(修改器) + * 将数组转换为JSON字符串存储 + * @param mixed $value + */ + public function setDimensionsAttribute($value) + { + $this->attributes['dimensions'] = is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; + } + } diff --git a/database/migrations/2026_01_13_094952_add_dimensions_to_course_content_evaluation_asks_table.php b/database/migrations/2026_01_13_094952_add_dimensions_to_course_content_evaluation_asks_table.php new file mode 100644 index 0000000..dc25597 --- /dev/null +++ b/database/migrations/2026_01_13_094952_add_dimensions_to_course_content_evaluation_asks_table.php @@ -0,0 +1,32 @@ +json('dimensions')->nullable()->comment('多维度题目的维度数据'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('course_content_evaluation_asks', function (Blueprint $table) { + $table->dropColumn('dimensions'); + }); + } +}; +