gpt4 book ai didi

mysql - 错误 1833 : cannot change colum id

转载 作者:行者123 更新时间:2023-12-01 00:43:18 25 4
gpt4 key购买 nike

通过提示命令,我使用逆向工程生成了一个包含 doctine 的数据库。它完美地工作:

php app/console doctrine:mapping:convert yml ./src/Gir/DatabaseBundle/Resources/config/doctrine/metadata/orm --from-database --force

之后,我创建了实体:

php app/console doctrine:mapping:import GirDatabaseBundle annotation

注释:

php app/console doctrine:generate:entities GirDatabaseBundle

然后,我使用 composer.phar 安装了 Symfony 的新更新。

然后,FOSUserBundle 用于管理我项目中的用户。

我必须使用此提示命令使用 doctrine 更新我的数据库以生成表用户和实体等:

php app/console doctrine:schema:update --force

当我执行此命令时,doctrine 在 Windows 提示命令中向我发送此错误:

**[Doctrine\DBAL\DBALException]**
An exception occured while executing 'ALTER TABLE agence CHANGE id id INT NOT NULL':
SQLSTATE[HY000]: General error: 1833 Cannot change colum 'id': used in a foreign key constraint 'fk_employe_agence1' of table 'gir.employe'

**[PDOException]**
SQLSTATE[HY000]: General error: 1833 Cannot change colum 'id': used in a foreign key constraint 'fk_employe_agence1' of table 'gir.employe'

这是agence表的SQL:

--
-- Base de données : `gir`
--

-- --------------------------------------------------------

--
-- Structure de la table `agence`
--

CREATE TABLE IF NOT EXISTS `agence` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(150) NOT NULL,
`nomVoie` varchar(150) NOT NULL,
`numVoie` int(5) DEFAULT NULL,
`codePostal` int(5) NOT NULL,
`comune` varchar(150) NOT NULL,
`telephone` varchar(150) NOT NULL,
`fax` varchar(150) NOT NULL,
`email` varchar(150) NOT NULL,
`entreprises_id` int(11) NOT NULL,
PRIMARY KEY (`id`,`entreprises_id`),
KEY `fk_agence_entreprises1_idx` (`entreprises_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

这是employe表的SQL:

--
-- Base de données : `enexgir`
--

-- --------------------------------------------------------

--
-- Structure de la table `employe`
--

CREATE TABLE IF NOT EXISTS `employe` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(45) NOT NULL,
`prenom` varchar(45) NOT NULL,
`poste` varchar(45) NOT NULL,
`portable` varchar(45) NOT NULL,
`ligneDirecte` varchar(45) NOT NULL,
`faxDirect` varchar(45) NOT NULL,
`email` varchar(150) NOT NULL,
`etat` tinyint(1) NOT NULL,
`agence_id` int(11) NOT NULL,
PRIMARY KEY (`id`,`agence_id`),
KEY `fk_employe_agence1_idx` (`agence_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `employe`
--
ALTER TABLE `employe`
ADD CONSTRAINT `fk_employe_agence1` FOREIGN KEY (`agence_id`) REFERENCES `agence` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

有人应该为什么以及如何用教义来解决这个问题?

最佳答案

外键的问题是 Doctrine 有时不能自己解决它们。但它通常适用于您暂时禁用 FK。尝试以下操作:

准备一个 SQL 转储,它将在导入期间禁用 FK 检查。然后告诉 Doctrine 将更改转储到文件中,而不是直接应用它们。然后用 MySQL 导入文件。

# disable FK checks during the import
echo 'SET FOREIGN_KEY_CHECKS = 0;' > dump.sql

# append the DB dump
app/console doctrine:schema:update --dump-sql --complete >> dump.sql

# import the dump into MySQL
mysql -u username -p -D dbname < dump.sql

如果没有抛出错误,让 Doctrine 检查所有内容是否与 ORM 定义一致:

app/console doctrine:schema:update --dump-sql --complete

如果这让您需要执行更多的 SQL 查询,那么就这样做。之后,您应该会没事的。

关于mysql - 错误 1833 : cannot change colum id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26627692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com