Laravel, показывающий 1215 (невозможно добавить ограничение внешнего ключа) при использовании миграции: только через ssh - PullRequest
0 голосов
/ 28 сентября 2018

Laravel 5.6.38

MySQL 5.7.23

PHP v7.2.10

В localhost PHP 7.2.4, он отлично работает в localhost, но в рабочемниже показана ошибка.

php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `videos` add constraint `videos_video_status_id_foreign` foreign key (`video_status_id`) references `statuses` (`status_id`))

  at /var/www/html/myapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
      /var/www/html/myapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  2   PDOStatement::execute()
      /var/www/html/myapp/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

  Please use the argument -v to see more details.

Вот как она работает на локальном хосте

D:\work\www\myapp>php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2018_08_29_112331_entrust_setup_tables
Migrated:  2018_08_29_112331_entrust_setup_tables
Migrating: 2018_08_31_103313_create_audits_table
Migrated:  2018_08_31_103313_create_audits_table
Migrating: 2018_09_06_125909_create_videos_table
Migrated:  2018_09_06_125909_create_videos_table
Migrating: 2018_09_12_064922_create_labels_table
Migrated:  2018_09_12_064922_create_labels_table
Migrating: 2018_09_14_073215_create_statuses_table
Migrated:  2018_09_14_073215_create_statuses_table
Migrating: 2018_09_14_114329_create_video_taggings_table
Migrated:  2018_09_14_114329_create_video_taggings_table
Migrating: 2018_09_15_105623_create_priorities_table
Migrated:  2018_09_15_105623_create_priorities_table
Migrating: 2018_09_17_044820_create_comments_table
Migrated:  2018_09_17_044820_create_comments_table
Migrating: 2018_09_24_130041_create_video_tagging_q_as_table
Migrated:  2018_09_24_130041_create_video_tagging_q_as_table

Обновление после обсуждения с @ apokryfos

Теперь файлы миграции

2014_10_12_000000_create_users_table
2014_10_12_100000_create_password_resets_table
2018_08_29_112331_entrust_setup_tables
2018_08_31_103313_create_audits_table
2018_09_06_064922_create_labels_table
2018_09_06_073215_create_statuses_table
2018_09_06_105623_create_priorities_table
2018_09_06_125909_create_videos_table
2018_09_14_114329_create_video_taggings_table
2018_09_17_044820_create_comments_table
2018_09_24_130041_create_video_tagging_q_as_table

и я получаю сообщение об ошибке

Dropped all tables successfully.
Migration table created successfully.

   Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `videos` add constraint `videos_video_identified_by_foreign` foreign key (`video_identified_by`) references `users` (`id`))

  at D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
      D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  2   PDOStatement::execute()
      D:\work\www\myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

, поэтому проблема не в дате создания файлов миграции, а в другом.

Пожалуйста, используйте аргумент-v, чтобы увидеть больше деталей.

1 Ответ

0 голосов
/ 28 сентября 2018

Я решил это как-то, но я хотел бы признаться, все должны очень строго использовать миграцию Laravel.

В чем ошибка?

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

В чем проблема?

  • Laravel создавал таблицы в соответствии с датой создания файла миграции, и он никогда не будет использовать обновление вашего файла: P, поэтому, когда одна таблица создана и требуетсявнешний ключ из другой таблицы, которая еще не создана, будет вызывать эту ошибку.

, поэтому, если ваш FK указывает на PK, убедитесь, что исходный столбецn существует.

Как вы можете решить эту проблему?

  • Настройте порядок генерации файлов миграции.Создайте новые файлы в правильном порядке, скопируйте содержимое, а затем удалите неупорядоченные старые файлы.

И это никогда не будет хорошей идеей, поэтому, пожалуйста, строго следуйте правилам.

...