migrations/Version20220412115006.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20220412115006 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'Roster';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // this up() migration is auto-generated, please modify it to your needs
  18.         ini_set('memory_limit''-1');
  19.         $this->connection->executeQuery('ALTER TABLE roster ADD player_id INT NOT NULL, ADD league_id INT DEFAULT NULL, ADD team_id INT NOT NULL');
  20.         $lastId 0;
  21.         $missing 0;
  22.         $players $leagues $teams $seasons = [];
  23.         while (true) {
  24.             $rosters $this->connection->fetchAllAssociative("SELECT idroster, idjoueur_roster, idligue_roster, idequipe_roster, idsaison_roster FROM roster WHERE idroster > {$lastId} LIMIT 100");
  25.             if (empty($rosters)) {
  26.                 break;
  27.             }
  28.             $queries = [];
  29.             foreach ($rosters as $roster) {
  30.                 $rosterId $lastId $roster['idroster'];
  31.                 $playerServiceId $roster['idjoueur_roster'];
  32.                 $leagueServiceId $roster['idligue_roster'];
  33.                 $teamServiceId $roster['idequipe_roster'];
  34.                 $seasonId $roster['idsaison_roster'];
  35.                 $playerId = !$playerServiceId null : ($players[$playerServiceId] ?? $this->connection->fetchOne("SELECT idjoueur from joueur WHERE idjoueurservice_joueur = {$playerServiceId}") ?? null);
  36.                 $leagueId = !$leagueServiceId null : ($leagues[$leagueServiceId] ?? $this->connection->fetchOne("SELECT idligue from ligue WHERE idligueservice_ligue = {$leagueServiceId} AND (lang_ligue IS NULL OR lang_ligue = '')") ?? null);
  37.                 $teamId = !$teamServiceId null : ($teams[$teamServiceId] ?? $this->connection->fetchOne("SELECT idequipe from equipe WHERE idequipeservice_equipe = {$teamServiceId}") ?? null);
  38.                 $seasonId = !$seasonId null : ($seasons[$seasonId] ?? $this->connection->fetchOne("SELECT idsaison from saison WHERE idsaison = {$seasonId}") ?? null);
  39.                 if ($playerId && $teamId && $seasonId) {
  40.                     $players[$playerServiceId] = $playerId;
  41.                     $leagues[$leagueServiceId] = $leagueId;
  42.                     $teams[$teamServiceId] = $teamId;
  43.                     $queries[] = "UPDATE roster SET player_id = {$playerId}, league_id = " . ($leagueId ?? 'NULL') . ", team_id = {$teamId} WHERE idroster = {$rosterId}";
  44.                 } else {
  45.                     $queries[] = "DELETE FROM roster WHERE idroster = {$rosterId}";
  46.                     ++$missing;
  47.                     if (!$playerId) {
  48.                         echo "Roster {$rosterId} : Missing Player.serviceId {$playerServiceId}\n";
  49.                     } elseif (!$teamId) {
  50.                         echo "Roster {$rosterId} : Missing Team.serviceId {$teamServiceId}\n";
  51.                     } elseif (!$seasonId) {
  52.                         echo "Roster {$rosterId} : Missing Season.id {$seasonId}\n";
  53.                     }
  54.                 }
  55.             }
  56.             if (!empty($queries)) {
  57.                 $this->connection->executeQuery(implode(';'$queries));
  58.             }
  59.         }
  60.         $rosters $this->connection->fetchAllAssociative('SELECT idroster FROM roster WHERE player_id = 0');
  61.         foreach ($rosters as $roster) {
  62.             $rosterId $roster['idroster'];
  63.             $this->connection->executeQuery("DELETE FROM roster WHERE idroster = {$rosterId}");
  64.             echo "Roster {$rosterId} : Missing Player.id (0)\n";
  65.             ++$missing;
  66.         }
  67.         $rosters $this->connection->fetchAllAssociative('SELECT idroster FROM roster WHERE team_id = 0');
  68.         foreach ($rosters as $roster) {
  69.             $rosterId $roster['idroster'];
  70.             $this->connection->executeQuery("DELETE FROM roster WHERE idroster = {$rosterId}");
  71.             echo "Roster {$rosterId} : Missing Team.id (0)\n";
  72.             ++$missing;
  73.         }
  74.         echo "Finish - {$missing} Rosters have been deleted";
  75.         $this->addSql('ALTER TABLE roster ADD CONSTRAINT FK_60B9ADF999E6F5DF FOREIGN KEY (player_id) REFERENCES joueur (idjoueur)');
  76.         $this->addSql('ALTER TABLE roster ADD CONSTRAINT FK_60B9ADF9B69D9EAA FOREIGN KEY (idsaison_roster) REFERENCES saison (idsaison)');
  77.         $this->addSql('ALTER TABLE roster ADD CONSTRAINT FK_60B9ADF958AFC4DE FOREIGN KEY (league_id) REFERENCES ligue (idligue)');
  78.         $this->addSql('ALTER TABLE roster ADD CONSTRAINT FK_60B9ADF9296CD8AE FOREIGN KEY (team_id) REFERENCES equipe (idequipe)');
  79.         $this->addSql('CREATE INDEX IDX_60B9ADF999E6F5DF ON roster (player_id)');
  80.         $this->addSql('CREATE INDEX IDX_60B9ADF958AFC4DE ON roster (league_id)');
  81.         $this->addSql('CREATE INDEX IDX_60B9ADF9296CD8AE ON roster (team_id)');
  82.     }
  83.     public function down(Schema $schema): void
  84.     {
  85.         // this down() migration is auto-generated, please modify it to your needs
  86.         $this->addSql('ALTER TABLE roster DROP FOREIGN KEY FK_60B9ADF999E6F5DF');
  87.         $this->addSql('ALTER TABLE roster DROP FOREIGN KEY FK_60B9ADF9B69D9EAA');
  88.         $this->addSql('ALTER TABLE roster DROP FOREIGN KEY FK_60B9ADF958AFC4DE');
  89.         $this->addSql('ALTER TABLE roster DROP FOREIGN KEY FK_60B9ADF9296CD8AE');
  90.         $this->addSql('DROP INDEX IDX_60B9ADF999E6F5DF ON roster');
  91.         $this->addSql('DROP INDEX IDX_60B9ADF958AFC4DE ON roster');
  92.         $this->addSql('DROP INDEX IDX_60B9ADF9296CD8AE ON roster');
  93.         $this->addSql('ALTER TABLE roster DROP player_id, DROP league_id, DROP team_id');
  94.     }
  95. }