<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use App\Domain\Core\Entity\Player;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220404175436 extends AbstractMigration
{
public function getDescription(): string
{
return 'Fill Player.positions from LiaisonJoueurPosition';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$lastId = 0;
while (true) {
$positions = $this->connection->fetchAllAssociative("SELECT * FROM liaison_joueur_position WHERE idliaison > {$lastId} ORDER BY idliaison ASC LIMIT 100");
if (empty($positions)) {
break;
}
$playersIds = array_column($positions, 'idjoueur');
$players = $this->connection->fetchAllAssociative('SELECT idjoueurservice_joueur, positions FROM joueur WHERE idjoueurservice_joueur in (' . implode(',', $playersIds) . ')');
$playersByPlayerId = array_combine(array_column($players, 'idjoueurservice_joueur'), $players);
$updateStmt = '';
foreach ($positions as $position) {
$lastId = (int) $position['idliaison'];
$playerId = $position['idjoueur'];
$positionId = (int) $position['idposition'];
if (!($player = $playersByPlayerId[$playerId] ?? null)) {
continue;
}
$positions = json_decode($player['positions'], true);
$newPosition = match ($positionId) {
1 => Player::POSITION_POINT_GUARD,
2 => Player::POSITION_SHOOTING_GUARD,
4 => Player::POSITION_SMALL_FORWARD,
8 => Player::POSITION_POWER_FORWARD,
16 => Player::POSITION_CENTER,
default => null,
};
if (!$newPosition) {
throw new \Exception(sprintf('Error : Player # %s | Position # %s', $playerId, $positionId));
}
$positions[] = $newPosition;
$positions = array_unique($positions);
$positionsJson = json_encode($positions);
$updateStmt .= "UPDATE joueur SET positions = '{$positionsJson}' WHERE idjoueurservice_joueur = {$playerId};";
}
if ($updateStmt) {
$this->connection->executeQuery($updateStmt);
}
}
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql("UPDATE joueur SET positions = '[]'");
}
}