<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220609081457 extends AbstractMigration
{
public function getDescription(): string
{
return 'Suppression/modification en cascade quand on supprime une entreprise.';
}
public function up(Schema $schema): void
{
// Si on supprime une entreprise, supprime toutes les entrées soumissionnaires de cette entreprise
// Cette contrainte n'est utilisée que pour une suppression directe via sql.
// Dans doctrine, on a un attribut cascade=remove sur company.tenderers qui est prioritaire et qui permet
// de supprimer également les uploads de chaque tenderer supprimé (via sql ils ne sont aps supprimés)
$this->addSql('ALTER TABLE tenderer DROP FOREIGN KEY FK_37F6A81B979B1AD6');
$this->addSql('ALTER TABLE tenderer ADD CONSTRAINT FK_37F6A81B979B1AD6 FOREIGN KEY (company_id) REFERENCES company (id) ON DELETE CASCADE');
// Si on supprime un DDO, on conserve ses projets mais on initialise le champ ddo_id de ses projets à null
$this->addSql('ALTER TABLE tender DROP FOREIGN KEY FK_42057A77B450C615');
$this->addSql('ALTER TABLE tender ADD CONSTRAINT FK_42057A77B450C615 FOREIGN KEY (ddo_id) REFERENCES company (id) ON DELETE SET NULL');
// Si on supprime le soumissionnaire pressenti d'un lot, réinitialise le champ soumissionnaire pressenti
$this->addSql('ALTER TABLE lot DROP FOREIGN KEY FK_B81291B64D7A2F');
$this->addSql('ALTER TABLE lot ADD CONSTRAINT FK_B81291B64D7A2F FOREIGN KEY (preferred_tenderer_id) REFERENCES tenderer (id) ON DELETE SET NULL');
// SI on supprime une entreprise qui avait un annuaire "mes entreprises" (ddo ou groupe), supprime tout l'annuaire
$this->addSql('ALTER TABLE company_review DROP FOREIGN KEY FK_44DCE5B3A76ED395');
$this->addSql('ALTER TABLE company_review ADD CONSTRAINT FK_44DCE5B3A76ED395 FOREIGN KEY (user_id) REFERENCES company (id) ON DELETE CASCADE');
// Si on supprime une entreprise, supprime tous les avis sur cette entreprise dans tous les annuaires
$this->addSql('ALTER TABLE company_review DROP FOREIGN KEY FK_44DCE5B3979B1AD6');
$this->addSql('ALTER TABLE company_review ADD CONSTRAINT FK_44DCE5B3979B1AD6 FOREIGN KEY (company_id) REFERENCES company (id) ON DELETE CASCADE');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE tenderer DROP FOREIGN KEY FK_37F6A81B979B1AD6');
$this->addSql('ALTER TABLE tenderer ADD CONSTRAINT FK_37F6A81B979B1AD6 FOREIGN KEY (company_id) REFERENCES company (id)');
$this->addSql('ALTER TABLE tender DROP FOREIGN KEY FK_42057A77B450C615');
$this->addSql('ALTER TABLE tender ADD CONSTRAINT FK_42057A77B450C615 FOREIGN KEY (ddo_id) REFERENCES company (id)');
$this->addSql('ALTER TABLE lot DROP FOREIGN KEY FK_B81291B64D7A2F');
$this->addSql('ALTER TABLE lot ADD CONSTRAINT FK_B81291B64D7A2F FOREIGN KEY (preferred_tenderer_id) REFERENCES tenderer (id)');
$this->addSql('ALTER TABLE company_review DROP FOREIGN KEY FK_44DCE5B3A76ED395');
$this->addSql('ALTER TABLE company_review ADD CONSTRAINT FK_44DCE5B3A76ED395 FOREIGN KEY (user_id) REFERENCES company (id)');
$this->addSql('ALTER TABLE company_review DROP FOREIGN KEY FK_44DCE5B3979B1AD6');
$this->addSql('ALTER TABLE company_review ADD CONSTRAINT FK_44DCE5B3979B1AD6 FOREIGN KEY (company_id) REFERENCES company (id)');
}
}