*/ private const ROWS = [ [ 'track_code' => 'tese_xiaofei', 'title' => '特色消费', 'description' => '(宠物经济、新国货与悦己消费、地标产品与老字号创新、汽车后市场服务等)', 'sort' => 1, ], [ 'track_code' => 'jiankang_xiaofei', 'title' => '健康消费', 'description' => '(医疗美容、减重与健康管理、运动与康复、科技与中医药、银发消费等)', 'sort' => 2, ], [ 'track_code' => 'shang_wen_lv', 'title' => '商文旅融合', 'description' => '(文旅 IP 创新、商业空间与首发经济、特色民宿与乡村旅游等)', 'sort' => 3, ], [ 'track_code' => 'xiaofei_ai', 'title' => '消费+人工智能', 'description' => '(智能消费硬件、数字消费、AI 内容创作等)', 'sort' => 4, ], ]; public function run(): void { $envId = (int) env('DEFAULT_TRACKS_COMPETITION_ID', 0); $competitions = $envId > 0 ? Competition::query()->whereKey($envId)->get() : Competition::query()->orderBy('id')->get(); if ($competitions->isEmpty()) { $this->command?->warn('No competition found, skip tracks seed.'); return; } foreach ($competitions as $competition) { foreach (self::ROWS as $row) { $sheet = DefaultTrackScoringSheets::forTrackCode($row['track_code'], $row['title']); CompetitionTrack::query()->updateOrCreate( [ 'competition_id' => $competition->id, 'track_code' => $row['track_code'], ], [ 'title' => $row['title'], 'description' => $row['description'], 'sort' => $row['sort'], 'is_enabled' => true, 'scoring_sheet_json' => $sheet, ] ); } $this->command?->info( 'Synced '.count(self::ROWS)." tracks (with scoring sheets) for competition #{$competition->id}." ); } } }