Почему не могу добавить новый внешний ключ?

98
25 августа 2019, 23:20

yii2, пытаюсь сделать миграцию для добавления внешнего ключа:

    $this->addForeignKey(
        'fk-subordination-sub_id',
        'subordination',
        'sub_id',
        'storage',
        'id',
        'CASCADE'
    );

возвращает ошибку:

Exception: SQLSTATE[23000]: 
Integrity constraint violation:
1452 Cannot add or update a child row: a foreign key constraint fails
(`images`.`#sql-5a0_1f3`, CONSTRAINT `fk-subordination-sub_id` FOREIGN KEY (`sub_id`) REFERENCES `storage` (`id`) ON DELETE CASCADE)

однако, если добавляю другой ключ:

    $this->addForeignKey(
        'fk-subordination-sub_id',
        'subordination',
        'sub_id',
        'user',
        'id',
        'CASCADE'
    );

то все работает нормально. все ключи int(11), отличий в создании не было (кроме создания pk), создавал так же через миграции:

subordination:

    $this->createTable('subordination', [
        'chief_id' => $this->integer(11),
        'sub_id' => $this->integer(11),
    ]);
    $this->addColumn('subordination', 'id', $this->primaryKey());

storage:

    $this->createTable('storage', [
        'id' => $this->primaryKey(),
        'name' => $this->string(),
        'photograph_id' => $this->integer(11)
    ])

в чем может быть проблема? mariaDB

Answer 1

1452 Cannot add or update a child row: a foreign key constraint fails

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

Так что сначала "выровняйте" данные, а потом создавайте внешний ключ.

READ ALSO
Зацикливается PHP код

Зацикливается PHP код

Есть ID записи $clients_id Пустой массив который должен запонлится ID-шниками вложенных записей $listId

104
Как получить время 5, 10, 20 или 30 минут назад?

Как получить время 5, 10, 20 или 30 минут назад?

Не могу найти в доках и гугле - как получить время 5, 10, 20 или 30 минут назад?

82
JWT токен - TOKEN_EXPIRED при 2 рефреше

JWT токен - TOKEN_EXPIRED при 2 рефреше

Всем приветПишу API на Laravel, использую пакет tymon/jwt-auth

108
Не могу поднять проект на ZendFramework

Не могу поднять проект на ZendFramework

Не могу поднять проект после "смерти сервака" Вылетает ошибка через WEB (You don't have permission to access /php-bin/php/indexphp on this server

85