角色添加失败,数据库报外键约束错误

来源:4-3 后台创建用户角色

kaylv

2018-01-19

数据库表按照视频那样,执行yii脚步命令生成


代码如下

http://img.mukewang.com/szimg/5a61c3e500017f0c06320419.jpg

错误信息:

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;


0
1
Jason
恩,应该是createRole(null)造成的问题
2018-01-29
共1条回复

Yii2.0进阶版 高级组件ES/Redis/Sentry优化京东平台

进阶更高阶的Yii 2.0开发,获得2-3年yii 2.0实战经验

514 学习 · 210 问题

查看课程