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; } // 只更新还不是校友的学员;从 非校友→校友 时顺带写入 schoolmate_time $userIds = $courseSigns->pluck('user_id')->unique()->values(); $updated = User::whereIn('id', $userIds) ->whereRaw('COALESCE(is_schoolmate, 0) != 1') ->update(['is_schoolmate' => 1, 'schoolmate_time' => now()]); $totalUpdated += $updated; } return $this->info("更新完成,共处理 {$totalUpdated} 位学员"); } }