<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use App\Domain\Content\Entity\ActualityRelation;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220517081539 extends AbstractMigration
{
public function getDescription(): string
{
return 'ActualityRelation';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->connection->executeQuery('ALTER TABLE actuliaison ADD player_id INT DEFAULT NULL, ADD league_id INT DEFAULT NULL, ADD team_id INT DEFAULT NULL, ADD game_id INT DEFAULT NULL, ADD country_id INT DEFAULT NULL');
$lastId = 0;
$missing = 0;
while (true) {
$relations = $this->connection->fetchAllAssociative("SELECT * FROM actuliaison WHERE idactuliaison > {$lastId} LIMIT 1000");
if (empty($relations)) {
break;
}
foreach ($relations as $relation) {
$relationId = $lastId = $relation['idactuliaison'];
$relationType = $relation['typeliaison'];
$relationIdWhat = $relation['idquoi'];
$actualityId = $relation['idactu'];
$actualityExists = $this->connection->fetchOne('SELECT idactu FROM actu WHERE idactu = :idactu', [
'idactu' => $actualityId,
]);
if (!$actualityExists) {
++$missing;
echo "Relation.id {$relationId} : Missing Actuality.id {$actualityId}\n";
$this->connection->executeQuery("DELETE FROM actuliaison WHERE idactuliaison = {$relationId}");
}
$query = null;
switch ((int) $relationType) {
case ActualityRelation::TYPE_PLAYER:
$playerId = $this->connection->fetchOne("SELECT idjoueur FROM joueur WHERE idjoueurservice_joueur = {$relationIdWhat}");
if ($playerId) {
$query = "player_id = {$playerId}";
}
break;
case ActualityRelation::TYPE_TEAM:
$teamId = $this->connection->fetchOne("SELECT idequipe FROM equipe WHERE idequipeservice_equipe = {$relationIdWhat}");
if ($teamId) {
$query = "team_id = {$teamId}";
}
break;
case ActualityRelation::TYPE_LEAGUE:
$leagueId = $this->connection->fetchOne("SELECT idligue FROM ligue WHERE idligueservice_ligue = {$relationIdWhat}");
if ($leagueId) {
$query = "league_id = {$leagueId}";
}
break;
case ActualityRelation::TYPE_GAME:
$gameId = $this->connection->fetchOne("SELECT idmatch FROM `match` WHERE idmatchservice_match = {$relationIdWhat}");
if ($gameId) {
$query = "game_id = {$gameId}";
}
break;
case ActualityRelation::TYPE_COUNTRY:
$countryId = $this->connection->fetchOne("SELECT idpays FROM pays WHERE idpays = {$relationIdWhat}");
if ($countryId) {
$query = "country_id = {$countryId}";
}
break;
default:
break;
}
if ($query) {
$this->connection->executeQuery("UPDATE actuliaison SET {$query} WHERE idactuliaison = {$relationId}");
} else {
echo "Missing Relation.id {$relationId}\n";
}
}
}
echo "Finished. {$missing} Relations have been deleted\n";
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB390350BCF2E2 FOREIGN KEY (idactu) REFERENCES actu (idactu)');
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB390399E6F5DF FOREIGN KEY (player_id) REFERENCES joueur (idjoueur)');
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB390358AFC4DE FOREIGN KEY (league_id) REFERENCES ligue (idligue)');
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB3903296CD8AE FOREIGN KEY (team_id) REFERENCES equipe (idequipe)');
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB3903E48FD905 FOREIGN KEY (game_id) REFERENCES `match` (idmatch)');
$this->addSql('ALTER TABLE actuliaison ADD CONSTRAINT FK_16BB3903F92F3E70 FOREIGN KEY (country_id) REFERENCES pays (idpays)');
$this->addSql('CREATE INDEX IDX_16BB390399E6F5DF ON actuliaison (player_id)');
$this->addSql('CREATE INDEX IDX_16BB390358AFC4DE ON actuliaison (league_id)');
$this->addSql('CREATE INDEX IDX_16BB3903296CD8AE ON actuliaison (team_id)');
$this->addSql('CREATE INDEX IDX_16BB3903E48FD905 ON actuliaison (game_id)');
$this->addSql('CREATE INDEX IDX_16BB3903F92F3E70 ON actuliaison (country_id)');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB390350BCF2E2');
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB390399E6F5DF');
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB390358AFC4DE');
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB3903296CD8AE');
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB3903E48FD905');
$this->addSql('ALTER TABLE actuliaison DROP FOREIGN KEY FK_16BB3903F92F3E70');
$this->addSql('DROP INDEX IDX_16BB390399E6F5DF ON actuliaison');
$this->addSql('DROP INDEX IDX_16BB390358AFC4DE ON actuliaison');
$this->addSql('DROP INDEX IDX_16BB3903296CD8AE ON actuliaison');
$this->addSql('DROP INDEX IDX_16BB3903E48FD905 ON actuliaison');
$this->addSql('DROP INDEX IDX_16BB3903F92F3E70 ON actuliaison');
$this->addSql('ALTER TABLE actuliaison DROP player_id, DROP league_id, DROP team_id, DROP game_id, DROP country_id');
}
}