migrations/Version20220404222228.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 Version20220404222228 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return 'ManyToOne Player.country1 and Player.country2';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // this up() migration is auto-generated, please modify it to your needs
  18.         $this->connection->executeQuery("UPDATE joueur SET date_naissance_joueur = NULL WHERE date_naissance_joueur LIKE '%0000-00-00%'");
  19.         $countries $this->connection->fetchAllAssociative('SELECT idpays FROM pays');
  20.         $countriesIds array_column($countries'idpays');
  21.         $lastId 0;
  22.         while (true) {
  23.             $players $this->connection->fetchAllAssociative("SELECT idjoueur, idpays1_joueur, idpays2_joueur FROM joueur WHERE idjoueur > {$lastId} ORDER BY idjoueur ASC LIMIT 1000");
  24.             if (empty($players)) {
  25.                 break;
  26.             }
  27.             foreach ($players as $player) {
  28.                 $playerId $lastId $player['idjoueur'];
  29.                 $removeId1 $removeId2 false;
  30.                 if (null !== $player['idpays1_joueur'] && !\in_array($player['idpays1_joueur'], $countriesIds)) {
  31.                     $removeId1 true;
  32.                 }
  33.                 if (null !== $player['idpays2_joueur'] && !\in_array($player['idpays2_joueur'], $countriesIds)) {
  34.                     $removeId2 true;
  35.                 }
  36.                 if (!$removeId1 && !$removeId2) {
  37.                     continue;
  38.                 }
  39.                 if ($removeId1 && $removeId2) {
  40.                     $query 'idpays1_joueur = NULL, idpays2_joueur = NULL';
  41.                 } elseif ($removeId1) {
  42.                     $query 'idpays1_joueur = NULL';
  43.                 } elseif ($removeId2) {
  44.                     $query 'idpays2_joueur = NULL';
  45.                 }
  46.                 $this->connection->executeQuery("UPDATE joueur SET {$query} WHERE idjoueur = {$playerId}");
  47.             }
  48.         }
  49.         $this->addSql('ALTER TABLE joueur ADD CONSTRAINT FK_FD71A9C59B51E2F3 FOREIGN KEY (idpays1_joueur) REFERENCES pays (idpays) ON DELETE SET NULL');
  50.         $this->addSql('ALTER TABLE joueur ADD CONSTRAINT FK_FD71A9C515DEE510 FOREIGN KEY (idpays2_joueur) REFERENCES pays (idpays) ON DELETE SET NULL');
  51.         $this->addSql('CREATE INDEX IDX_FD71A9C59B51E2F3 ON joueur (idpays1_joueur)');
  52.         $this->addSql('CREATE INDEX IDX_FD71A9C515DEE510 ON joueur (idpays2_joueur)');
  53.     }
  54.     public function down(Schema $schema): void
  55.     {
  56.         // this down() migration is auto-generated, please modify it to your needs
  57.         $this->addSql('ALTER TABLE joueur DROP FOREIGN KEY FK_FD71A9C59B51E2F3');
  58.         $this->addSql('ALTER TABLE joueur DROP FOREIGN KEY FK_FD71A9C515DEE510');
  59.         $this->addSql('DROP INDEX IDX_FD71A9C59B51E2F3 ON joueur');
  60.         $this->addSql('DROP INDEX IDX_FD71A9C515DEE510 ON joueur');
  61.     }
  62. }