повсюду искали это, ничего не находили.
Я использую миграцию для 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
Я попробовал изменить данные столбца и несколько других битов, но ничего не понял, интересно, кто-нибудь раньше столкнулся с этой проблемой и нашел решение, так как я ничего не могу найти!
Ладно, так как это мучило меня, и я не хотел сдерживаться, я начал с создания отдельной модели для 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',
],
]);
}