migrations/Version20220404175436.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use App\Domain\Core\Entity\Player;
  5. use Doctrine\DBAL\Schema\Schema;
  6. use Doctrine\Migrations\AbstractMigration;
  7. /**
  8.  * Auto-generated Migration: Please modify to your needs!
  9.  */
  10. final class Version20220404175436 extends AbstractMigration
  11. {
  12.     public function getDescription(): string
  13.     {
  14.         return 'Fill Player.positions from LiaisonJoueurPosition';
  15.     }
  16.     public function up(Schema $schema): void
  17.     {
  18.         // this up() migration is auto-generated, please modify it to your needs
  19.         $lastId 0;
  20.         while (true) {
  21.             $positions $this->connection->fetchAllAssociative("SELECT * FROM liaison_joueur_position WHERE idliaison > {$lastId} ORDER BY idliaison ASC LIMIT 100");
  22.             if (empty($positions)) {
  23.                 break;
  24.             }
  25.             $playersIds array_column($positions'idjoueur');
  26.             $players $this->connection->fetchAllAssociative('SELECT idjoueurservice_joueur, positions FROM joueur WHERE idjoueurservice_joueur in (' implode(','$playersIds) . ')');
  27.             $playersByPlayerId array_combine(array_column($players'idjoueurservice_joueur'), $players);
  28.             $updateStmt '';
  29.             foreach ($positions as $position) {
  30.                 $lastId = (int) $position['idliaison'];
  31.                 $playerId $position['idjoueur'];
  32.                 $positionId = (int) $position['idposition'];
  33.                 if (!($player $playersByPlayerId[$playerId] ?? null)) {
  34.                     continue;
  35.                 }
  36.                 $positions json_decode($player['positions'], true);
  37.                 $newPosition = match ($positionId) {
  38.                     => Player::POSITION_POINT_GUARD,
  39.                     => Player::POSITION_SHOOTING_GUARD,
  40.                     => Player::POSITION_SMALL_FORWARD,
  41.                     => Player::POSITION_POWER_FORWARD,
  42.                     16 => Player::POSITION_CENTER,
  43.                     default => null,
  44.                 };
  45.                 if (!$newPosition) {
  46.                     throw new \Exception(sprintf('Error : Player # %s | Position # %s'$playerId$positionId));
  47.                 }
  48.                 $positions[] = $newPosition;
  49.                 $positions array_unique($positions);
  50.                 $positionsJson json_encode($positions);
  51.                 $updateStmt .= "UPDATE joueur SET positions = '{$positionsJson}' WHERE idjoueurservice_joueur = {$playerId};";
  52.             }
  53.             if ($updateStmt) {
  54.                 $this->connection->executeQuery($updateStmt);
  55.             }
  56.         }
  57.     }
  58.     public function down(Schema $schema): void
  59.     {
  60.         // this down() migration is auto-generated, please modify it to your needs
  61.         $this->addSql("UPDATE joueur SET positions = '[]'");
  62.     }
  63. }