2014-12-01 128 views
1

我用idiorm +超薄SQLSTATE [23000]:完整性約束違規:1452不能添加或更新子行,外鍵約束失敗

我知道下面的更新查詢,但我嘗試在控制檯phpMyAdmin的和有用。

update empleado set `nieempleado`='11111', nombre="Mickael", apellido1="aaa", apellido2="bbb", email="[email protected]", puesto=0 where id = 1 

但idiorm錯誤SQLSTATE [23000]

What's問題?

if(count($error)==0) 
     { 

      $empleado = ORM::for_table('empleado')->find_one($id); 
      $empleado->nieempleado = $nie; 
      $empleado->nombre = $nombre; 
      $empleado->apellido1 = $apellido1; 
      $empleado->apellido2 = $apellido2; 
      $empleado->email = $email; 
      $empleado->puesto = $puesto; 
      if(!empty($telefono)) 
      { 
       $empleado->telefono = $telefono; 
      } 
      if($usuario!=='') 
      { 
       $empleado->usuario_idusuario = $usuario; 
      } 
      $empleado->save(); 
      $app->redirect($app->urlFor('employeeList')); 
     } 

我的表是usuario:

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

和empleado

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

我得到以下錯誤:

Type: PDOException 
Code: 23000 
Message: 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) 
File: C:\wamp\www\viver\vendor\j4mie\idiorm\idiorm.php 
Line: 413 
Trace 

#0 C:\wamp\www\viver\vendor\j4mie\idiorm\idiorm.php(413): PDOStatement->execute(Array) 
#1 C:\wamp\www\viver\vendor\j4mie\idiorm\idiorm.php(1735): ORM::_execute('UPDATE `emplead...', Array, 'default') 
#2 C:\wamp\www\viver\routes\employees.php(213): ORM->save() 
#3 [internal function]: {closure}('1') 
#4 C:\wamp\www\viver\vendor\slim\slim\Slim\Route.php(462): call_user_func_array(Object(Closure), Array) 
#5 C:\wamp\www\viver\vendor\slim\slim\Slim\Slim.php(1326): Slim\Route->dispatch() 
#6 C:\wamp\www\viver\vendor\slim\slim\Slim\Middleware\Flash.php(85): Slim\Slim->call() 
#7 C:\wamp\www\viver\vendor\slim\slim\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call() 
#8 C:\wamp\www\viver\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call() 
#9 C:\wamp\www\viver\vendor\slim\slim\Slim\Slim.php(1271): Slim\Middleware\PrettyExceptions->call() 
#10 C:\wamp\www\viver\public\index.php(55): Slim\Slim->run() 
#11 {main} 

回答

3

你的錯誤意味着你要在列中插入一個值在empleado表中不存在於usuario表中id列中。沒有看到正在運行的查詢和表值,我不能給你任何更多的信息。您需要確保在id中存在任何值usuario_idusuario

感謝,

安德魯

+0

根據您的表結構,你不能插入該列的NULL:外鍵('usuario_idusuario') 參考'usuario'('id') ON DELETE CASCADE ON UPDATE CASCADE 您必須將鍵約束從「CASCADE」更改爲「SET NULL」或刪除鍵約束。 – versalle88 2014-12-01 17:58:58

+0

你能看到我的[問題](https://stackoverflow.com/questions/48683524/data-not-saved-into-database-yii2?noredirect=1#comment84368513_48683524)嗎? – 2018-02-08 12:52:44