You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wx.sstbc.com/course_url_update_readme.md

3.5 KiB

课程URL更新命令使用说明

功能描述

这个Laravel命令 UpdateCourseUrls 用于从Excel文件读取课程信息并自动更新数据库中课程的URL字段。

主要功能

  1. Excel文件解析: 读取Excel文件中的课程数据和跳转链接信息
  2. 数据匹配: 从phome_ecms_news表中根据跳转链接匹配title字段获取对应的titleurl
  3. 智能匹配: 支持精确匹配、模糊匹配和相似度匹配三种方式
  4. 批量更新: 将获取到的titleurl批量更新到courses表的url字段

命令使用方法

基本用法

php artisan update:course-urls

指定Excel文件

php artisan update:course-urls "your_excel_file.xlsx"

Excel文件格式要求

Excel文件需要包含以下列

  • 课程: 包含课程名称的列
  • 跳转链接: 包含需要匹配的标题的列

文件可以包含多个工作表,命令会自动处理所有工作表。

匹配逻辑

1. 新闻标题匹配从phome_ecms_news表

  • 精确匹配: 直接匹配title字段
  • 模糊匹配: 使用LIKE进行部分匹配
  • 相似度匹配: 使用Levenshtein算法计算字符串相似度自动选择相似度最高的记录

2. 课程名称匹配更新courses表

  • 精确匹配: 直接匹配name字段
  • 模糊匹配: 使用LIKE进行部分匹配
  • 相似度匹配: 使用Levenshtein算法计算字符串相似度自动选择相似度最高的记录

特殊处理

  1. 软删除过滤: 只处理未被软删除的课程记录
  2. 空值检查: 自动跳过空的课程名称或跳转链接
  3. 重复更新: 如果课程已有URL会被新的URL覆盖
  4. 详细日志: 提供详细的处理日志,包括匹配方式和相似度信息
  5. 失败统计: 自动显示匹配失败的课程名称列表

相似度算法说明

相似度计算使用多种策略:

  • Levenshtein距离: 计算字符编辑距离
  • 包含检查: 如果一个字符串包含另一个,会提高相似度
  • 预处理: 移除空格并转换为小写进行比较

示例输出

开始处理文件: 课程台账.xlsx
Excel文件包含 2 个工作表
正在处理工作表: Sheet1
工作表 Sheet1 有 10 行,最高列为 C
表头: 序号, 课程, 跳转链接
找到课程列: 2跳转链接列: 3
处理行 2: 课程='Python基础课程', 跳转链接='Python编程入门教程'
通过相似度匹配找到 (相似度: 85.7%): 'Python编程入门教程完整版' -> '/news/python-tutorial-2024'
✓ 成功更新课程 'Python基础课程' 的URL为: /news/python-tutorial-2024
工作表 Sheet1 中匹配失败的课程:
  - 高级数据分析课程
  - 机器学习实战
处理完成,总共更新了 6 条记录

注意事项

  1. 确保Excel文件位于项目根目录或提供正确的文件路径
  2. 确保数据库连接正常,特别是phome_ecms_news表的访问权限
  3. 建议在执行前备份courses表的数据
  4. 相似度匹配会自动选择最高相似度的记录,无需设置阈值
  5. 命令会显示所有匹配失败的课程名称,便于后续手动处理

错误处理

命令包含完善的错误处理机制:

  • 文件不存在检查
  • 数据库连接错误处理
  • Excel格式错误处理
  • 详细的错误日志输出

数据库表结构要求

phome_ecms_news表

  • title: 新闻标题字段
  • titleurl: 新闻URL字段

courses表

  • name: 课程名称字段
  • url: 课程URL字段会被更新
  • deleted_at: 软删除时间戳字段