代码之家  ›  专栏  ›  技术社区  ›  Prafulla Kumar Sahu umang naik

使用时显示1215的Laravel(无法添加外键约束)migration:fresh through 宋承宪

  •  0
  • Prafulla Kumar Sahu umang naik  · 技术社区  · 6 年前

    PHP版本7.2.10

    在localhost php7.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.
    

    这就是它在localhost中的运行方式

    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
    

    所以,问题不在于迁移文件的创建日期,而是不同的。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Prafulla Kumar Sahu umang naik    6 年前

    我是怎么解决的,但我想承认,每个人都应该 严格使用拉维偏移。

    怎么了?

    • 我是在localhost上工作的,所以在开发过程中,您需要对表结构进行大量更改,并且在这个过程中我还需要大量时间重新生成表,所以我认为,我不需要为每次修改创建另一个迁移文件,因为我现在正在重新生成所有内容,当应用程序将完成,我将需要作出更改,在这段时间里,我将使用单独的迁移文件。

    有什么问题?

    因此,如果FK指向PK,请确保源列存在。

    如何解决?

    这从来不是个好主意,所以请严格遵守规则。