where(function ($query) use ($today) { // 方式1: start_date 已填写且 <= 今天 $query->where(function ($q) use ($today) { $q->whereNotNull('start_date') ->where('start_date', '<=', $today); }) // 方式2: 或者课程状态为进行中(即使 start_date 未及时填写) ->orWhere('course_status', 10); }) ->get(); $totalUpdated = 0; foreach ($courses as $course) { // 获取报名通过的学员 $courseSigns = CourseSign::where('course_id', $course->id)->where('status', 1)->get(); if ($courseSigns->isEmpty()) { continue; } // 只更新还不是校友的学员,避免重复处理 // 注意:is_schoolmate != 1 不会匹配 NULL 值,需要显式包含 NULL $updated = User::whereIn('id', $courseSigns->pluck('user_id')) ->where(function ($query) { $query->where('is_schoolmate', '!=', 1) ->orWhereNull('is_schoolmate'); }) //->where('is_black',0) ->update(['is_schoolmate' => 1]); $totalUpdated += $updated; } return $this->info("更新完成,共处理 {$totalUpdated} 位学员"); } }