Yii2 RBAC GII 完整性约束违反
Yii2 RBAC GII Integrity Constraint Violation
到处找这个,一无所获。
我正在使用 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
我试过更改列详细信息和其他几个位都无济于事,我想知道是否有人以前遇到过这个问题并找到了解决方案,因为我在上面找不到任何东西!
好吧,因为这折磨着我,而且不想被阻止,我开始从头开始为 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
将此错误带回给我一直。
真诚地希望这对任何搜索并找到它的人有所帮助,因为在任何地方都没有答案!!
我有同样的问题,但使用 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',
],
]);
}
到处找这个,一无所获。
我正在使用 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
我试过更改列详细信息和其他几个位都无济于事,我想知道是否有人以前遇到过这个问题并找到了解决方案,因为我在上面找不到任何东西!
好吧,因为这折磨着我,而且不想被阻止,我开始从头开始为 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
将此错误带回给我一直。
真诚地希望这对任何搜索并找到它的人有所帮助,因为在任何地方都没有答案!!
我有同样的问题,但使用 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',
],
]);
}