У меня возникают проблемы с созданием внешнего ключа при некоторых миграциях.
Имею следующее:
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
Кто-нибудь может помочь, пожалуйста? Я просмотрел другие ответы здесь, и, похоже, никто не помог.
Дэйв
Вы можете просто использовать $table = $this->table('courses');, поскольку столбец первичного ключа с именем id создается по умолчанию. Вы проверили, создается ли вообще таблица courses? Может, по журналу запросов к БД?
@DerekFulginiti Я использую phinx 0.10.6. Что странно, когда я использую эти миграции в существующем проекте с использованием базы данных postgres, они работают нормально. Но в моем новом проекте с использованием базы данных mysql я получаю ошибку.
Как уже упоминалось, следующим шагом будет убедиться, что таблица курсов действительно создана.
Да, таблица курсов создается. Также таблица показателей создается только без внешнего ключа.
Установите предел столбца course_id точно так же, как столбец courses таблицы id.






Вы не можете установить SET_NULL при удалении, если ваш столбец не допускает значения NULL. Измените код, и вы будете готовы к миграции.
это было решение для меня! Спасибо
Какую версию phinx вы используете? Вы можете найти это в своем файле composer.lock