到处寻找这个,一无所获。
我正在使用Yii2的迁移为RBAC添加数据库表,它们已被创建好,已经仔细检查了一切,都很好。
我知道你可以使用
$author = $auth->createRole('author');
$auth->add($author);
$auth->addChild($author, $createPost);
并且做得很好,但是,我希望有自定义管理区域来设置角色,权限等,并最终添加组策略。
当我通过gii创建模型和CRUD来实现这一点时,每当我尝试添加auth_item时,我都会收到以下错误
Integrity constraint violation – yii\db\IntegrityException
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`ronbuild`.`auth_item`, CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE)
The SQL being executed was: INSERT INTO `auth_item` (`name`, `type`, `description`, `rule_name`, `data`) VALUES ('dog', 1, '', '', '')
Error Info: Array
(
[0] => 23000
[1] => 1452
[2] => Cannot add or update a child row: a foreign key constraint fails (`ronbuild`.`auth_item`, CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE)
)
↵
Caused by: PDOException
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`ronbuild`.`auth_item`, CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE)
in C:\wamp\www\ronbuild\vendor\yiisoft\yii2\db\Command.php at line 781
我已经尝试更改列详细信息和其他几个部分无济于事,我想知道是否有人之前遇到过这个问题并找到了解决方案,因为我找不到任何内容!
答案 0 :(得分:2)
我有同样的问题但是使用batchInsert()修复它这个方法将正确地转义列名,并绑定要插入的值。
请查看参考http://www.yiiframework.com/doc-2.0/yii-db-migration.html#batchInsert()-detail
如何在以下迁移中使用batchInsert()方法的一个很好的示例:
源代码可能如下所示:
public function up()
{
$columns = ['name', 'type', 'description'];
$this->batchInsert('{{%auth_item}}', $columns, [
[
'admin',
1,
'Role Admin',
],
[
'backend',
1,
'Role Backend',
],
[
'user',
1,
'Role User',
],
]);
}
答案 1 :(得分:0)
好吧,因为这是折磨我,并且不想被阻止,我开始从地板上为AuthItem建立一个单独的模型,经过一些来回,我怀疑这一点。
public function rules()
{
return [
[['name', 'type'], 'required'],
[['type', 'created_at', 'updated_at'], 'integer'],
[['description', 'data'], 'string'],
[['name', 'rule_name'], 'string', 'max' => 64]
];
}
Gii生成的规则通过添加规则[['name', 'rule_name'], 'string', 'max' => 64]
添加了对连接的外键的引用,并且在规则中提到了rule_name
,这个错误将这个错误带回给我时间。
真诚地希望这可以帮助任何搜索并发现这一点的人,因为在任何地方都没有答案!!