我已经在 symfony 中生成了此迁移,以将createdAt和UpdatedAt字段添加到表中
<?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 Version20241105173344 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('ALTER TABLE user ADD created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', ADD updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\'');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE `user` DROP created_at, DROP updated_at');
}
}
但是当我尝试执行迁移时
An exception occurred while executing a query: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'user' already exists
迁移并没有尝试再次创建表,我不知道迁移出了什么问题
Doctrine 迁移系统将所有已执行的迁移保存在单独的表中,以“记住”哪些迁移已经执行。一旦执行迁移过程,它会在代码中找到第一个未执行的迁移,并从这一个开始执行所有未执行的迁移。
现在,回到你的错误。它清楚地显示
Table 'user' already exists
,这意味着它正在尝试创建表格。如果由于某种原因您的数据库中已存在此表,但负责此更改的迁移未标记为已执行,并且当您开始迁移过程时,它会尝试执行“创建表用户”查询,则可能会发生这种情况,这很可能位于代码中旧迁移中的某个位置。它与您在问题中给我们的迁移无关。