protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) { $em = $this->getHelper('em')->getEntityManager(); $playerRepository = new PlayerRepository($em); $pitchers = $playerRepository->getAllPitchers(); $count = 0; $stats = array(); foreach ($pitchers as $pitcher) { $output->writeln($pitcher); $matchups = $pitcher->getPitchingMatchupsAsPitcher(); $runsAllowed = 0; $totalMatchups = 0; foreach ($matchups as $matchup) { $runsAllowed += $matchup->getRunsScored(); //$output->writeln($matchup); $totalMatchups++; } $output->writeln('Total Matchups: ' . $totalMatchups); $output->writeln('Runs allowed: ' . $runsAllowed); } }
/** * Create a game from a Retrosheet file * * @param string[] $records * @return BBM\Game */ public function createGameFromRetrosheetRecords($records) { // Get an instance of the Team and Site Respositories $teamRepository = new TeamRepository($this->em); $ballparkRepository = new BallparkRepository($this->em); $umpireRepository = new UmpireRepository($this->em); $playerRepository = new PlayerRepository($this->em); $game = new Game(); $homeStartingLineup = new StartingLineup(); $awayStartingLineup = new StartingLineup(); // variables to hold the current pitcher $currentHomePitcher; $currentAwayPitcher; // Loop through each of the records and create a record foreach ($records as $record) { // Break the record into fields $fields = $record; // Based on the record type, take appropriate action switch ($fields[0]) { case 'id': $game->setId($fields[1]); break; case 'version': if ($fields[1] != 2) { throw new \Exception('Incompatible Version: ' . $fields[1]); } break; case 'info': switch ($fields[1]) { case 'visteam': $game->setAwayTeam($teamRepository->findTeamByAbbr($fields[2])); break; case 'hometeam': $game->setHomeTeam($teamRepository->findTeamByAbbr($fields[2])); break; case 'site': $game->setBallpark($ballparkRepository->findBallparkById($fields[2])); break; case 'date': $game->setGameStart(new \DateTime($fields[2])); break; case 'starttime': case 'number': case 'daynight': // Ignore break; case 'usedh': $game->setUseDH($fields[2]); break; case 'umphome': $game->setHomePlateUmpire($umpireRepository->findUmpireById($fields[2])); break; case 'ump1b': $game->setFirstBaseUmpire($umpireRepository->findUmpireById($fields[2])); break; case 'ump2b': $game->setSecondBaseUmpire($umpireRepository->findUmpireById($fields[2])); break; case 'ump3b': $game->setThirdBaseUmpire($umpireRepository->findUmpireById($fields[2])); break; case 'howscored': case 'pitches': case 'temp': $game->setTemperature($fields[2]); break; case 'winddir': $game->setWindDir($fields[2]); break; case 'windspeed': $game->setWindSpeed($fields[2]); break; case 'fieldcond': case 'precip': case 'sky': case 'timeofgame': //TODO break; case 'attendance': $game->setAttendance($fields[2]); break; case 'wp': case 'lp': case 'save': //TODO break; default: print_r($fields); throw new \Exception('Invalid info record: ' . $fields[1]); } break; case 'start': case 'sub': if ($fields[5] == 9) { $pitcher = $playerRepository->findPlayerById($fields[1]); if ($fields[3] == 0) { // If a start add to the starting lineup if ($fields[0] == 'start') { $awayStartingLineup->setPitcher($pitcher); } $currentAwayPitcher = $pitcher; } else { // If a start add to the starting lineup if ($fields[0] == 'start') { $homeStartingLineup->setPitcher($pitcher); } $currentHomePitcher = $pitcher; } } break; case 'play': $play = new Play(); $play->setInning($fields[1]); $play->setTeam($fields[2] == 0 ? $game->getAwayTeam() : $game->getHomeTeam()); $play->setBatter($playerRepository->findPlayerById($fields[3])); $play->setPitcher($fields[2] == 0 ? $currentAwayPitcher : $currentHomePitcher); $play->setPitchCount($fields[4]); $play->setPitches($fields[5]); $play->setEvent($fields[6]); $game->addPlay($play); break; case 'com': case 'data': //TODO break; default: throw new \Exception('Invalid Retrosheet Record Type: ' . $fields[0]); } } $game->setHomeStartingLineup($homeStartingLineup); $game->setAwayStartingLineup($awayStartingLineup); return $game; }