L'intégrité de la violation de la contrainte: 1452 Ne peut pas ajouter ou mettre à jour une ligne enfant:
Je suis en train d'insérer des valeurs dans mes commentaires sur la table et je reçois un message d'erreur. Sa en disant que je ne peux pas ajouter ou mettre à jour ligne enfant et je n'ai aucune idée de ce que cela signifie.
mon schéma ressemble à quelque chose comme ceci
-- ----------------------------
-- Table structure for `comments`
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
`id` varchar(36) NOT NULL,
`project_id` varchar(36) NOT NULL,
`user_id` varchar(36) NOT NULL,
`task_id` varchar(36) NOT NULL,
`data_type_id` varchar(36) NOT NULL,
`data_path` varchar(255) DEFAULT NULL,
`message` longtext,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_comments_users` (`user_id`),
KEY `fk_comments_projects1` (`project_id`),
KEY `fk_comments_data_types1` (`data_type_id`),
CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
-- ----------------------------
-- Records of comments
-- ----------------------------
-- ----------------------------
-- Table structure for `projects`
-- ----------------------------
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
`id` varchar(36) NOT NULL,
`user_id` varchar(36) NOT NULL,
`title` varchar(45) DEFAULT NULL,
`description` longtext,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_projects_users1` (`user_id`),
CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
-- ----------------------------
-- Records of projects
-- ----------------------------
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Brand New Project', 'This is a brand new project', '2012-12-27 15:24:02', '2012-12-27 15:24:02');
et mysql déclaration, je suis en train de faire ressemble à quelque chose comme ceci
INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`)
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'this is a test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3')
l'erreur que je reçois ressemble à ceci
SQLSTATE[23000]: Integrity constraint violation: 1452 Impossible d'ajouter ou de
mise à jour d'une ligne enfant: une contrainte de clé étrangère échoue
(anthonyl_fbpj
.comments
, CONTRAINTEfk_comments_projects1
LA CLÉ ÉTRANGÈRE (project_id
) RÉFÉRENCESprojects
(id
) ON DELETE NO
ACTION ON UPDATE NO ACTION)
Vous devez vous connecter pour publier un commentaire.
- Il tout simplement signifie que la valeur de la colonne
project_id
sur la tablecomments
vous insérez n'existe pas sur la tableprojects
. Gardez à l'esprit que les valeurs de la colonneproject_id
sur la tablecomments
est dépendante des valeurs deID
sur la tableProjects
.La valeur
50dc845a-83e4-4db3-8705-5432ae7aaee3
vous insérez pour la colonneproject_id
n'existe pas sur la tableprojects
.Assurez-vous d'avoir
project_id
dans lefillable
propriété de votreComment
modèle.J'ai eu le même problème, Et c'était la raison.
Assurez-vous également que la clé étrangère que vous ajoutez est le même type de la colonne d'origine, si la colonne que vous êtes à la référence n'est pas le même type, il échouera aussi.
Au cas où quelqu'un est à l'aide de Laravel et devient de ce problème. Je devenais ainsi, et la question était dans l'ordre dans lequel j'ai été insertion de l'ids (c'est à dire, les clés étrangères) dans le tableau croisé dynamique.
Pour être concret, voici un exemple pour une relation plusieurs-à-plusieurs:
wordtokens <-> wordtoken_wordchunk <-> wordchunks
Maintenant mes modèles se présenter comme suit:
J'ai résolu le problème en échangeant l'ordre de "wordchunk_id" et "wordtoken_id" dans le Wordchunk modèle.
Pour la complétion de code, c'est la façon dont je persiste modèles:
D'abord de supprimer la contrainte "fk_comments_projects1" et aussi de son index. Après que le recréer.
J'espère que ma décision va nous aider. J'ai eu une erreur similaire dans Laravel. J'ai ajouté une clé étrangère à la mauvaise table.
Mauvais code:
Veuillez noter que la fonction('comments') ci-dessus. Le code est Correct
J'ai eu ce problème quand j'étais accidentellement en utilisant le MAUVAIS "uuid" dans mon enregistrement enfant. Lorsque cela se produit, la contrainte, l'air de l'enfant vers le parent de l'enregistrement pour s'assurer que le lien est correct. J'ai été de le créer manuellement, lorsque je l'avais déjà truqué mon Modèle pour le faire automatiquement. Donc, ma solution était:
Puis quand j'ai appelé mon enfant de la classe d'insérer les enfants, j'ai passé cette var valeur:
Espère que ça aide.
Peut-être que vous avez quelques lignes dans la table que vous souhaitez créer de FK.
Exécuter la migration avec foreign_key_checks OFF
Insérer uniquement les enregistrements qui ont un champ id dans la table des matières.
Si vous ajoutez de nouveaux clé étrangère dans une table existante et les colonnes ne sont pas nulles et non assignées à la valeur par défaut, vous obtiendrez cette erreur,
Soit vous avez besoin de faire
nullable
ouassign default value
, oudelete all the existing records
pour le résoudre.