Миграции Cakephp - общая ошибка: 1215 не удается добавить ограничение внешнего ключа

У меня возникают проблемы с созданием внешнего ключа при некоторых миграциях.

Имею следующее:

20180926184217_Courses.php

public function change()
{
    $table = $this->table('courses', ['id' => true, 'primary_key' => ['id']]);
    $table
        ->addColumn('name', 'string', ['default' => null, 'limit' => 150, 'null' => false])
        ->addColumn('town', 'string', ['default' => null, 'limit' => 50, 'null' => true])
        ->create();
}

20180926191546_Scorecards.php

public function change()
{
    $table = $this->table('scorecards', ['id' => true, 'primary_key' => ['id']]);
    $table
        ->addColumn('course_id', 'integer', ['default' => null, 'limit' => 10, 'null' => false])
        ->addColumn('description', 'string', ['default' => null, 'limit' => 255, 'null' => true])
        ->addColumn('tee', 'string', ['default' => null, 'limit' => 15, 'null' => false])
        ->addForeignKey('course_id', 'courses', 'id', ['delete' => 'SET_NULL', 'update' => 'NO_ACTION', 'constraint' => 'fk_scorecard_course'])
        ->create();
}

Когда я запускаю bin/cake migrations migrate, я получаю следующую ошибку:

Исключение: SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа в [* / vendor / robmorgan / phinx / src / Phinx / Db / Adapter / PdoAdapter.php, строка 167] 2018-09-26 19:12:50 Ошибка: [PDOException] SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа в * / vendor / robmorgan / phinx / src / Phinx / Db / Adapter / PdoAdapter.php в строке 167

Кто-нибудь может помочь, пожалуйста? Я просмотрел другие ответы здесь, и, похоже, никто не помог.

Дэйв

Какую версию phinx вы используете? Вы можете найти это в своем файле composer.lock

Derek Fulginiti 26.09.2018 22:43

Вы можете просто использовать $table = $this->table('courses');, поскольку столбец первичного ключа с именем id создается по умолчанию. Вы проверили, создается ли вообще таблица courses? Может, по журналу запросов к БД?

miken32 26.09.2018 23:13

@DerekFulginiti Я использую phinx 0.10.6. Что странно, когда я использую эти миграции в существующем проекте с использованием базы данных postgres, они работают нормально. Но в моем новом проекте с использованием базы данных mysql я получаю ошибку.

davidjh 27.09.2018 09:15

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

Derek Fulginiti 27.09.2018 11:46

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

davidjh 27.09.2018 16:56

Установите предел столбца course_id точно так же, как столбец courses таблицы id.

Ishan Vyas 30.09.2018 16:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
501
1

Ответы 1

Вы не можете установить SET_NULL при удалении, если ваш столбец не допускает значения NULL. Измените код, и вы будете готовы к миграции.

это было решение для меня! Спасибо

Miguel Stevens 25.10.2020 09:06

Другие вопросы по теме