<?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 Version20250808203116 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE chat_file (id INT AUTO_INCREMENT NOT NULL, message_id INT DEFAULT NULL, user_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, file VARCHAR(255) NOT NULL, INDEX IDX_2A03AB51537A1329 (message_id), INDEX IDX_2A03AB51A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('ALTER TABLE chat_file ADD CONSTRAINT FK_2A03AB51537A1329 FOREIGN KEY (message_id) REFERENCES chat_message (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE chat_file ADD CONSTRAINT FK_2A03AB51A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
$this->addSql("
INSERT INTO chat_file (message_id, user_id, name, file)
SELECT m.id AS message_id,
m.user_id AS user_id,
SUBSTRING_INDEX(m.file, '/', -1) AS name,
m.file AS file
FROM chat_message m
WHERE m.file IS NOT NULL AND m.file <> ''
");
$this->addSql('ALTER TABLE chat_message DROP file');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE chat_message ADD file VARCHAR(255) DEFAULT NULL COLLATE `utf8mb4_general_ci`');
// take the first file per message
$this->addSql('
UPDATE chat_message m
JOIN (
SELECT cf.message_id, cf.file
FROM chat_file cf
INNER JOIN (
SELECT message_id, MIN(id) AS min_id
FROM chat_file
GROUP BY message_id
) first_files ON cf.message_id = first_files.message_id AND cf.id = first_files.min_id
) f ON m.id = f.message_id
SET m.file = f.file
');
$this->addSql('DROP TABLE chat_file');
}
}