执行查询时发生异常:SQLSTATE[42S01]: 基表或视图已存在: 1050 表 'user' 已存在

问题描述 投票:0回答:1

我已经在 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

迁移并没有尝试再次创建表,我不知道迁移出了什么问题

php symfony doctrine migration
1个回答
0
投票

Doctrine 迁移系统将所有已执行的迁移保存在单独的表中,以“记住”哪些迁移已经执行。一旦执行迁移过程,它会在代码中找到第一个未执行的迁移,并从这一个开始执行所有未执行的迁移。

现在,回到你的错误。它清楚地显示

Table 'user' already exists
,这意味着它正在尝试创建表格。如果由于某种原因您的数据库中已存在此表,但负责此更改的迁移未标记为已执行,并且当您开始迁移过程时,它会尝试执行“创建表用户”查询,则可能会发生这种情况,这很可能位于代码中旧迁移中的某个位置。它与您在问题中给我们的迁移无关。

© www.soinside.com 2019 - 2024. All rights reserved.