“SQLSTATE[23000]: Integrity constraint violation” en cours de validité avec contrainte
Je suis en utilisant Symfony 2 avec la Doctrine.
J'ai 4 classes: Pays, un District, un Comté et Locales. Le District a une clé étrangère du Pays; le Comté a un étranger de District; Local dispose d'une clé étrangère de District.
Le problème est que lors de l'insertion d'un Comté (à l'aide de jeux de données de test), j'obtiens l'erreur
SQLSTATE[23000]: Integrity constraint violation:
J'ai perdu le code SQL pour créer les tables et les contraintes, et obtenu ceci:
CREATE TABLE Country (id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
insertedAt DATETIME NOT NULL,
flag LONGTEXT DEFAULT NULL COMMENT '(DC2Type:object)',
PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE County (id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
insertedAt DATETIME NOT NULL,
insertedBy INT NOT NULL,
idDistrict INT NOT NULL,
INDEX IDX_5F4EFA13438082DC (insertedBy),
INDEX IDX_5F4EFA1362627EDC (idDistrict),
PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE District (id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
insertedAt DATETIME NOT NULL,
insertedBy INT NOT NULL,
idCountry INT NOT NULL,
INDEX IDX_C8B736D1438082DC (insertedBy),
INDEX IDX_C8B736D143CAA294 (idCountry),
PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE LOCAL (id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
insertedAt DATETIME NOT NULL,
insertedBy INT NOT NULL,
idCounty INT NOT NULL,
INDEX IDX_4A17A7EC438082DC (insertedBy),
INDEX IDX_4A17A7EC3BF357BF (idCounty),
PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE County ADD CONSTRAINT FK_5F4EFA13438082DC
FOREIGN KEY (insertedBy) REFERENCES Account(id);
ALTER TABLE County ADD CONSTRAINT FK_5F4EFA1362627EDC
FOREIGN KEY (idDistrict) REFERENCES District(id);
ALTER TABLE District ADD CONSTRAINT FK_C8B736D1438082DC
FOREIGN KEY (insertedBy) REFERENCES Account(id);
ALTER TABLE District ADD CONSTRAINT FK_C8B736D143CAA294
FOREIGN KEY (idCountry) REFERENCES Country(id);
ALTER TABLE LOCAL ADD CONSTRAINT FK_4A17A7EC438082DC
FOREIGN KEY (insertedBy) REFERENCES Account(id);
ALTER TABLE LOCAL ADD CONSTRAINT FK_4A17A7EC3BF357BF
FOREIGN KEY (idCounty) REFERENCES County(id);
Le problème n'est pas dans le DataFixture lui-même parce que j'ai essayé d'insérer un Comté à l'aide de PhpMyAdmin et j'ai obtenu le même message d'erreur.
Toutes les tables sont créées dans le moteur InnoDB et je peux créer avec succès un Pays et d'un District. L'erreur se produit uniquement avec le Comté de l'entité.
Grâce
- C'est pourquoi vous devez vous écrire de SQL à la main .. ehh. De toute façon. Avez-vous remarqué, qu'il y a deux définitions de
Country
table? Aussi il serait bien, si vous souhaitez fournir les données, qui peuvent reproduire l'erreur. - Non, une définition est pour le pays, l'autre pour le comté (n r).
- Oh .. les américains.
Vous devez vous connecter pour publier un commentaire.
Votre appareil fichier est probablement de tenter d'insérer une ligne pour
County
pour lesquels il n'existe pas de ligne correspondant à la accountId ou la districtId.Cette clé vous oblige à s'assurer que les accountid vous entrez dans le
County
table a un id correspondant dans laaccount
table.Même que accountId, à l'exception de l'absence de correspondance d'id dans le
district
table.Alors vérifiez vos appareils le fichier et assurez-vous que la circonscription et le compte de l'insertion de lignes (et validées) avant d'insérer un comté de ligne.
SET foreign_key_checks = 0;
En fait il y a un bug dans le serveur MySQL 5.6.33-79.0
Percona Server (GPL), la Libération De 79,0, Révision 2084bdb
dans Linux (x86_64)
Unistalled MAMP Pro et installé apache, mysql et php, un par un. Le même projet a travaillé sous ce nouvel environnement