$gameid, 'UserID' => $userId, 'create_at' => Carbon::now() ]); } /** * 统计最近一周内根据 gameid 返回条数 * * @return \Illuminate\Support\Collection */ public static function getWeeklyStats() { $oneWeekAgo = Carbon::now()->subWeek(); return self::select('gameid', \DB::raw('COUNT(*) as clicks')) ->where('create_at', '>=', $oneWeekAgo) ->groupBy('gameid') ->orderBy('clicks', 'desc') ->get(); } public static function getWeeklyStatsByBrand() { $oneWeekAgo = Carbon::now()->subWeek(); // 获取最近一周点击数量最多的游戏 $gameClicks = self::select('gameid', \DB::raw('COUNT(*) as clicks')) ->where('create_at', '>=', $oneWeekAgo) ->groupBy('gameid') ->orderBy('clicks', 'desc') ->get(); // 获取游戏详细信息 $gameIdsAll = $gameClicks->pluck('gameid')->toArray(); $games = GameCard::whereIn('id', $gameIdsAll)->where('state','<>',0)->get()->keyBy('id'); // 按品牌分类,确保每个品牌最多返回16个游戏 $result = []; foreach ($gameClicks as $click) { $game = $games->get($click->gameid); if ($game) { if (!isset($result[$game->brand])) { $result[$game->brand] = []; } if (count($result[$game->brand]) < 16) { $result[$game->brand][] = $game->id; } } } // 将结果格式化为 "brand: gameid, gameid, ..." foreach ($result as $brand => $gameIds) { $result[$brand] = implode(', ', $gameIds); } $result['ALL']=$gameIdsAll;//implode(', ', array_slice(,0,16)); return $result; } }