【问题标题】:Symfony - SQLSTATE[42000]: Syntax error or access violation [duplicate]Symfony - SQLSTATE [42000]:语法错误或访问冲突[重复]
【发布时间】:2021-09-16 02:03:44
【问题描述】:

所以我使用 maker bundle 提供的 make:entity 命令在 Symfony 中创建了 4 个实体。然后我使用 make:migration 命令来获取 Symfony 生成的迁移文件,但是当我尝试运行命令时教义:迁移:迁移它输出此错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups (id INT AUTO_INCREMENT NOT NULL, ort_id INT NOT NULL, confession VARCHAR(' at line 1

我不知道为什么它会输出错误,因为这个文件是 Symfony 使用 make:migration 命令自动生成的,但这里是它生成的迁移文件

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20210705091302 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 event (id INT AUTO_INCREMENT NOT NULL, churchgroups_id INT NOT NULL, title VARCHAR(255) NOT NULL, date DATE NOT NULL, time TIME NOT NULL, language VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, INDEX IDX_3BAE0AA7B686F042 (churchgroups_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
        $this->addSql('CREATE TABLE groups (id INT AUTO_INCREMENT NOT NULL, ort_id INT NOT NULL, confession VARCHAR(255) NOT NULL, INDEX IDX_F06D3970B62F846A (ort_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
        $this->addSql('CREATE TABLE places (id INT AUTO_INCREMENT NOT NULL, place VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
        $this->addSql('CREATE TABLE user (id INT AUTO_INCREMENT NOT NULL, churchgroup_id INT NOT NULL, email VARCHAR(255) NOT NULL, lastname VARCHAR(255) NOT NULL, firstname VARCHAR(255) NOT NULL, function VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, roles LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', INDEX IDX_8D93D649294D5D31 (churchgroup_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
        $this->addSql('ALTER TABLE event ADD CONSTRAINT FK_3BAE0AA7B686F042 FOREIGN KEY (churchgroups_id) REFERENCES groups (id)');
        $this->addSql('ALTER TABLE groups ADD CONSTRAINT FK_F06D3970B62F846A FOREIGN KEY (ort_id) REFERENCES places (id)');
        $this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D649294D5D31 FOREIGN KEY (churchgroup_id) REFERENCES groups (id)');
    }

    public function down(Schema $schema): void
    {
        // this down() migration is auto-generated, please modify it to your needs
        $this->addSql('ALTER TABLE event DROP FOREIGN KEY FK_3BAE0AA7B686F042');
        $this->addSql('ALTER TABLE user DROP FOREIGN KEY FK_8D93D649294D5D31');
        $this->addSql('ALTER TABLE groups DROP FOREIGN KEY FK_F06D3970B62F846A');
        $this->addSql('DROP TABLE event');
        $this->addSql('DROP TABLE groups');
        $this->addSql('DROP TABLE places');
        $this->addSql('DROP TABLE user');
    }
}

如果您需要其他任何内容,请在 cmets 中告诉我,我一定会尽快编辑帖子

【问题讨论】:

  • 请分享更多细节 - 您尝试过什么来解决问题?这样的错误与 PHP 或 Symfony 有什么关系?
  • 来自手册GROUPS (R); added in 8.0.2 (reserved)

标签: php mysql database symfony


【解决方案1】:

groups 是 MySQL 中的保留关键字,有关此类关键字的完整列表,请参阅 https://dev.mysql.com/doc/refman/8.0/en/keywords.html

您应该引用表名(带反引号),或者在您的实体中使用另一个表名(这是更好的解决方案,因为这样可以避免将来可能出现的其他问题)

【讨论】:

  • 哦,是的,这似乎是问题所在。奇怪..通常当您通过控制台使用 make:entity 命令生成实体时,如果您使用的实体的名称是保留字,它会告诉您错误。由于某种原因它不存在
猜你喜欢
  • 2015-10-12
  • 2023-04-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
相关资源
最近更新 更多