value('players'); // if ($cached_players) { // return $cached_players; // } $matches = StatistikoEvent::whereIn('season', $season) ->where(function ($query) use ($team_id, $team_position) { switch ($team_position) { case 'home': return $query->where('home_id', '=', $team_id); case 'away': return $query->where('away_id', '=', $team_id); default: return $query->where('home_id', '=', $team_id) ->orWhere('away_id', '=', $team_id); } })->pluck('match_id')->toArray(); $matches_count = count($matches); $positions_map = LoadPositions::load(); $team_player_ids = StatistikoDetail::where('ss_team_id', $team_id)->pluck('ss_player_id')->toArray(); $players = SofaScorePlayerPerSeason::with('details')->where('season', $season)->whereIn('ss_player_id', $team_player_ids)->get(); $arr = []; foreach ($players as $val) { if ($val->details) { $player_id = $val->ss_player_id; if (! isset($arr[$player_id])) { $arr[$player_id]['player_name'] = $val->details->player_name; $arr[$player_id]['events_played_home'] = $val->events_played_home; $arr[$player_id]['events_played_away'] = $val->events_played_away; $arr[$player_id]['minutes_played_home'] = $val->minutes_played_home; $arr[$player_id]['minutes_played_away'] = $val->minutes_played_away; $arr[$player_id]['preferred_foot'] = $val->details->preferred_foot ?? ''; $arr[$player_id]['player_position'] = $val->details->position ?? ''; $arr[$player_id]['color_level'] = round($matches_count / 3); } else { $arr[$player_id]['events_played_home'] += $val->events_played_home; $arr[$player_id]['events_played_away'] += $val->events_played_away; $arr[$player_id]['minutes_played_home'] += $val->minutes_played_home; $arr[$player_id]['minutes_played_away'] += $val->minutes_played_away; } } } $result = []; foreach ($arr as $player_id => $val) { switch ($team_position) { case 'home': $events_played = $val['events_played_home']; $minues_played = $val['minutes_played_home']; break; case 'away': $events_played = $val['events_played_away']; $minues_played = $val['minutes_played_away']; break; default: $events_played = $val['events_played_home'] + $val['events_played_away']; $minues_played = $val['minutes_played_home'] + $val['minutes_played_home']; break; } $colorlevel = round($matches_count / 3); if (in_array($val['player_position'], $positions_map['MIDFIELD'])) { $position = 'MIDFIELD'; } elseif (in_array($val['player_position'], $positions_map['DEFENCE'])) { $position = 'DEFENCE'; } elseif (in_array($val['player_position'], $positions_map['ATTACK'])) { $position = 'ATTACK'; } elseif (in_array($val['player_position'], $positions_map['GOALKEEPER'])) { $position = 'GOALKEEPER'; } else { $position = 'NO SPECIFIC POSITION'; } $infostring = ''; if ($colorlevel > 1 && $events_played < $colorlevel) { $infostring = '
'; } elseif ($events_played < $colorlevel * 2) { $infostring = '
'; } else { $infostring = '
'; } $infostring .= '
'.$val['player_name'].' '.$val['player_position'].'
'; $infostring .= '
'.$events_played.' Events,
'; $infostring .= '
'.$val['preferred_foot'].' foot,
'; if ($events_played) { $infostring .= '
Av. on field '.round($minues_played / $events_played).'min
'; } $infostring .= '
'; $result[$position][$player_id] = $infostring; } // if ($result) { // SofaScorePlayerCache::updateOrCreate(['hash' => $hash], ['players' => $result]); // } return $result; } public static function convertToHoursMins(int $time, $format = '%02dh:%02dm') { if ($time < 1) { return; } $hours = floor($time / 60); $minutes = $time % 60; return sprintf($format, $hours, $minutes); } }