Yii2 RBAC GII Нарушение ограничений целостности

1

повсюду искали это, ничего не находили.

Я использую миграцию для Yii2, чтобы добавить таблицы базы данных для RBAC, они были созданы отлично, дважды проверили все, все в порядке.

Я знаю, что вы можете использовать

$author = $auth->createRole('author');
$auth->add($author);
$auth->addChild($author, $createPost);

и все же сделали все, но я хочу иметь настраиваемую область администрирования для настройки ролей, разрешений и т.д. и, в конечном итоге, добавлять групповые политики.

Когда я создаю Модели и CRUD через gii для выполнения этого, всякий раз, когда я пытаюсь добавить 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

Я попробовал изменить данные столбца и несколько других битов, но ничего не понял, интересно, кто-нибудь раньше столкнулся с этой проблемой и нашел решение, так как я ничего не могу найти!

Теги:
database
yii2
rbac
yii

2 ответа

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 в правилах это все время возвращало мне эту ошибку.

Искренне надеется, что это поможет любому, кто искал и нашел это, поскольку нигде не было ответа!

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',
        ],
    ]);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню