角色添加失败,数据库报外键约束错误
来源:4-3 后台创建用户角色

kaylv
2018-01-19
数据库表按照视频那样,执行yii脚步命令生成
代码如下
错误信息:
2018-01-19 17:48:47 [127.0.0.1][-][-][error][yii\db\IntegrityException] PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`yii2_shop`.`shop_auth_item`, CONSTRAINT `shop_auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `shop_auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE) in /var/www/yii2-shop/vendor/yiisoft/yii2/db/Command.php:994
Stack trace:
#0 /var/www/yii2-shop/vendor/yiisoft/yii2/db/Command.php(994): PDOStatement->execute()
#1 /var/www/yii2-shop/vendor/yiisoft/yii2/rbac/DbManager.php(283): yii\db\Command->execute()
#2 /var/www/yii2-shop/vendor/yiisoft/yii2/rbac/BaseManager.php(130): yii\rbac\DbManager->addItem(Object(yii\rbac\Role))
#3 /var/www/yii2-shop/modules/controllers/RbacController.php(35): yii\rbac\BaseManager->add(Object(yii\rbac\Role))
#4 [internal function]: app\modules\controllers\RbacController->actionCreaterole()
#5 /var/www/yii2-shop/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('createrole', Array)
#8 /var/www/yii2-shop/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('admin/rbac/crea...', Array)
#9 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 /var/www/yii2-shop/web/index.php(12): yii\base\Application->run()
#11 {main}
Next yii\db\IntegrityException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`yii2_shop`.`shop_auth_item`, CONSTRAINT `shop_auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `shop_auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE)
The SQL being executed was: INSERT INTO `shop_auth_item` (`name`, `type`, `description`, `rule_name`, `data`, `created_at`, `updated_at`) VALUES ('admin', 1, '超级管理员', '', 's:0:\"\";', 1516355327, 1516355327) in /var/www/yii2-shop/vendor/yiisoft/yii2/db/Schema.php:595
Stack trace:
#0 /var/www/yii2-shop/vendor/yiisoft/yii2/db/Command.php(1004): yii\db\Schema->convertException(Object(PDOException), 'INSERT INTO `sh...')
#1 /var/www/yii2-shop/vendor/yiisoft/yii2/rbac/DbManager.php(283): yii\db\Command->execute()
#2 /var/www/yii2-shop/vendor/yiisoft/yii2/rbac/BaseManager.php(130): yii\rbac\DbManager->addItem(Object(yii\rbac\Role))
#3 /var/www/yii2-shop/modules/controllers/RbacController.php(35): yii\rbac\BaseManager->add(Object(yii\rbac\Role))
#4 [internal function]: app\modules\controllers\RbacController->actionCreaterole()
#5 /var/www/yii2-shop/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('createrole', Array)
#8 /var/www/yii2-shop/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('admin/rbac/crea...', Array)
#9 /var/www/yii2-shop/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 /var/www/yii2-shop/web/index.php(12): yii\base\Application->run()
#11 {main}
1回答
-
kaylv
提问者
2018-01-24
这是主外键约束问题,因此把代码中如果没有数据就赋值为null
$role->ruleName = (isset($post['rule_name']) && !empty($post['rule_name'])) ? $post['rule_name'] : null;
$role->data = (isset($post['data']) && !empty($post['data'])) ? $post['data'] : null;012018-01-29
相似问题