<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
use RuntimeException;
final class Version20250602102500 extends AbstractMigration
{
public function getDescription(): string
{
return 'Create cmcm_request_cmcm_request junction table for many-to-many self-referential relationship';
}
public function up(Schema $schema): void
{
$this->skipIf($schema->hasTable('cmcm_request_cmcm_request'), 'Table cmcm_request_cmcm_request already exists');
// Ensure the cmcm_request table exists
if (!$schema->hasTable('cmcm_request')) {
throw new RuntimeException('Required table cmcm_request does not exist. Run migrations in correct order.');
}
$junctionTable = $schema->createTable('cmcm_request_cmcm_request');
$junctionTable->addColumn('cmcm_request_source', 'integer', ['notnull' => true]);
$junctionTable->addColumn('cmcm_request_target', 'integer', ['notnull' => true]);
$junctionTable->addIndex(['cmcm_request_source'], 'IDX_CMCM_REQUEST_SOURCE');
$junctionTable->addIndex(['cmcm_request_target'], 'IDX_CMCM_REQUEST_TARGET');
$junctionTable->setPrimaryKey(['cmcm_request_source', 'cmcm_request_target']);
$junctionTable->addForeignKeyConstraint('cmcm_request', ['cmcm_request_source'], ['id'], ['onDelete' => 'CASCADE'], 'FK_CMCM_REQUEST_SOURCE');
$junctionTable->addForeignKeyConstraint('cmcm_request', ['cmcm_request_target'], ['id'], ['onDelete' => 'CASCADE'], 'FK_CMCM_REQUEST_TARGET');
}
public function down(Schema $schema): void
{
$this->skipIf(!$schema->hasTable('cmcm_request_cmcm_request'), 'Table cmcm_request_cmcm_request does not exist');
$schema->dropTable('cmcm_request_cmcm_request');
}
}