General error: 1822 Failed to add the foreign key constaint

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

General error: 1822 Failed to add the foreign key constaint

Сообщение slo_nik »

Доброй ночи.
Пытаюсь создать внешний ключ auth_assignments -> user
В таблице user поле id char(36) not null primary key. Индекс создан
В таблице auth_assegnments поле user_id char(36) not null primary key. Индекс создан. Таблица создана через миграции в rbac.
Обе таблицы пустые
Создаю внешний ключ и получаю ошибку "General error: 1822 Failed to add the foreign key constaint. Missing index for constraint 'fk-auth_assignments-user_id' in the referenced table 'users'"

Код: Выделить всё

$this->addForeignKey('fk-auth_assignments-user_id', '{{%auth_assignments}}', 'user_id', '{{%users}}', 'id', 'CASCADE');
Как решить данную проблему?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: General error: 1822 Failed to add the foreign key constaint

Сообщение maleks »

А что за БД?

Мускул автоматом индексы создает для полей на которые ссылаются внешние ключи.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: General error: 1822 Failed to add the foreign key constaint

Сообщение slo_nik »

maleks писал(а): 2020.12.04, 07:51 А что за БД?

Мускул автоматом индексы создает для полей на которые ссылаются внешние ключи.
MySql, таблицы InnoDB
Поначалу я не делал индексы, но из-за ошибки решил попробовать сделать, но ничего не получается.

В auth_assignments составной первичный ключ, может в этом проблема?

Изначально id в user и user_id в auth_assingments были типом int(11). Хочу использовать uuid для первичных ключей, для этого и пытаюсь это сделать.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: General error: 1822 Failed to add the foreign key constaint

Сообщение slo_nik »

maleks писал(а): 2020.12.04, 07:51
Изначально пытался решить задачу простым alterColumn

Код: Выделить всё

$this->db->createCommand("SET FOREIGN_KEY_CHECKS=0")->execute();
$this->alterColumn('{{%users}}', 'id', $this->char(36)->notNull());
$this->alterColumn('{{%auth_assignments}}', 'user_id', $this->char(36)->notNull());
$this->db->createCommand("SET FOREIGN_KEY_CHECKS=1")->execute();
Но в этом случае получаю ошибку "General error: 1025 Error on rename of './site/#sql-4f8_22' to './site/users' (errno: 150 - Foreign key constraint is incorrectly formed)"
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: General error: 1822 Failed to add the foreign key constaint

Сообщение slo_nik »

Задача решилась.
Проблема была в несоответствии кодировки столбцов.
В auth_assigments для user_id была кодировка utf8_unicode_ci, а в users для id была кодировка utf8_general_ci.
Закрыто