Yii2 RBAC GII完整性约束违规

时间:2015-10-10 19:18:38

标签: php database yii yii2 rbac

到处寻找这个,一无所获。

我正在使用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

我已经尝试更改列详细信息和其他几个部分无济于事,我想知道是否有人之前遇到过这个问题并找到了解决方案,因为我找不到任何内容!

2 个答案:

答案 0 :(得分:2)

我有同样的问题但是使用batchInsert()修复它这个方法将正确地转义列名,并绑定要插入的值。

请查看参考http://www.yiiframework.com/doc-2.0/yii-db-migration.html#batchInsert()-detail

如何在以下迁移中使用batchInsert()方法的一个很好的示例:

https://github.com/wartron/yii2-account-rbac-uuid/blob/master/migrations/m150823_001311_create_default_roles.php

源代码可能如下所示:

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,这个错误将这个错误带回给我时间。

真诚地希望这可以帮助任何搜索并发现这一点的人,因为在任何地方都没有答案!!