Symfony - SQLSTATE [42000]:语法错误或访问冲突
Symfony - SQLSTATE[42000]: Syntax error or access violation
所以我使用制造商包提供的 make:entity 命令在 Symfony 中创建了 4 个实体。然后我使用 make:migration 命令获取 Symfony 生成的迁移文件但是当我尝试 运行 命令 doctrine:migrations:migrate 它输出这个错误:
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');
}
}
如果您还需要什么,请在评论中告诉我,我一定会尽快编辑post
groups
是 MySQL 中的保留关键字,有关此类关键字的完整列表,请参阅 https://dev.mysql.com/doc/refman/8.0/en/keywords.html。
您应该引用 table 名称(带反引号),或者在您的实体中使用另一个 table 名称(这是更好的解决方案,因为这样可以避免在未来)
所以我使用制造商包提供的 make:entity 命令在 Symfony 中创建了 4 个实体。然后我使用 make:migration 命令获取 Symfony 生成的迁移文件但是当我尝试 运行 命令 doctrine:migrations:migrate 它输出这个错误:
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');
}
}
如果您还需要什么,请在评论中告诉我,我一定会尽快编辑post
groups
是 MySQL 中的保留关键字,有关此类关键字的完整列表,请参阅 https://dev.mysql.com/doc/refman/8.0/en/keywords.html。
您应该引用 table 名称(带反引号),或者在您的实体中使用另一个 table 名称(这是更好的解决方案,因为这样可以避免在未来)