SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败

Mig*_*nez 3 php idiorm

我用的是idiorm+slim

\n\n

我意识到以下更新查询,但我在控制台 phpmyadmin 中尝试并且它有效。

\n\n
update empleado set `nieempleado`=\'11111\', nombre="Mickael", apellido1="aaa", apellido2="bbb", email="ma@gmail.com", puesto=0 where id = 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

但在惯用语中错误 SQLSTATE[23000]

\n\n

问题是什么?

\n\n
if(count($error)==0)\n        {\n\n            $empleado = ORM::for_table(\'empleado\')->find_one($id);\n            $empleado->nieempleado = $nie;\n            $empleado->nombre = $nombre;\n            $empleado->apellido1 = $apellido1;\n            $empleado->apellido2 = $apellido2;\n            $empleado->email = $email;\n            $empleado->puesto = $puesto;   \n            if(!empty($telefono))\n            {\n                $empleado->telefono = $telefono;\n            }\n            if($usuario!==\'\')\n            {\n                $empleado->usuario_idusuario = $usuario;\n            }  \n            $empleado->save();\n            $app->redirect($app->urlFor(\'employeeList\'));\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的桌子是usuario:

\n\n
CREATE TABLE IF NOT EXISTS `usuario` (\n           `id` int(11) UNSIGNED AUTO_INCREMENT,\n           `username` varchar(45) NOT NULL,\n           `contrasenia` varchar(255) NOT NULL,\n           `email` varchar(45) NOT NULL,\n           `admin` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,\n            PRIMARY KEY (`id`)) \n            ENGINE = InnoDB;\n
Run Code Online (Sandbox Code Playgroud)\n\n

和恩普莱多

\n\n
CREATE TABLE IF NOT EXISTS `empleado` (\n           `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,\n           `nieempleado` VARCHAR(10) NOT NULL,\n           `nombre` VARCHAR(45) NOT NULL,\n           `apellido1` VARCHAR(50) NOT NULL,\n           `apellido2` VARCHAR(50) NOT NULL,\n           `email` VARCHAR(100) NOT NULL,\n           `telefono` VARCHAR(10) NULL,\n           `puesto` int(11) NOT NULL,\n           `usuario_idusuario` int(11) UNSIGNED,\n            PRIMARY KEY (`id`),\n            INDEX `fk_empleado_usuario1_idx` (`usuario_idusuario` ASC),\n            CONSTRAINT `fk_empleado_usuario_id_fk`\n            FOREIGN KEY (`usuario_idusuario`)\n            REFERENCES `usuario` (`id`)\n            ON DELETE CASCADE\n            ON UPDATE CASCADE\n            )ENGINE = InnoDB;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下错误:

\n\n
Type: PDOException\nCode: 23000\nMessage: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`viversoft`.`empleado`, CONSTRAINT `fk_empleado_usuario_id_fk` FOREIGN KEY (`usuario_idusuario`) REFERENCES `usuario` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)\nFile: C:\\wamp\\www\\viver\\vendor\\j4mie\\idiorm\\idiorm.php\nLine: 413\nTrace\n\n#0 C:\\wamp\\www\\viver\\vendor\\j4mie\\idiorm\\idiorm.php(413): PDOStatement->execute(Array)\n#1 C:\\wamp\\www\\viver\\vendor\\j4mie\\idiorm\\idiorm.php(1735): ORM::_execute(\'UPDATE `emplead...\', Array, \'default\')\n#2 C:\\wamp\\www\\viver\\routes\\employees.php(213): ORM->save()\n#3 [internal function]: {closure}(\'1\')\n#4 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Route.php(462): call_user_func_array(Object(Closure), Array)\n#5 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Slim.php(1326): Slim\\Route->dispatch()\n#6 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Middleware\\Flash.php(85): Slim\\Slim->call()\n#7 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Middleware\\MethodOverride.php(92): Slim\\Middleware\\Flash->call()\n#8 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Middleware\\PrettyExceptions.php(67): Slim\\Middleware\\MethodOverride->call()\n#9 C:\\wamp\\www\\viver\\vendor\\slim\\slim\\Slim\\Slim.php(1271): Slim\\Middleware\\PrettyExceptions->call()\n#10 C:\\wamp\\www\\viver\\public\\index.php(55): Slim\\Slim->run()\n#11 {main}\n
Run Code Online (Sandbox Code Playgroud)\n

ver*_*e88 6

您的错误意味着您尝试将一个值插入到表中的列usuario_idusuarioempleado,而该值不存在于表id中的列中usuario。如果没有看到正在运行的查询和表值,我无法为您提供更多信息。您需要确保进入的任何值都usuario_idusuario存在于id.

谢谢,

安德鲁