播种时找不到表

Posted

技术标签:

【中文标题】播种时找不到表【英文标题】:Table not found when seeding 【发布时间】:2017-07-09 11:09:21 【问题描述】:

以下是我的迁移

用户表与客户表有关系

在用户中:

$table->integer('customer_id')->unsigned();
$table->foreign('customer_id')->references('id')->on('customers');

当我打电话给php artisan migrate:refresh --seed 时,工匠给了我以下错误:

[Illuminate\Database\QueryException]                                         
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL  
  : alter table `users` add constraint `users_customer_id_foreign` foreign ke  
  y (`customer_id`) references `customers` (`id`))                             



  [PDOException]                                                          
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

因为customers表不存在...(很明显)

有没有办法解决这个问题?我知道更改文件的日期可以解决这个问题,但应该有更好的方法

【问题讨论】:

重命名customers表迁移文件,使其出现在users表迁移文件之前。现在删除数据库并运行您的命令。 【参考方案1】:

在添加外键之前,您必须创建要引用的表。一个解决方案是从您的用户表迁移中删除外键约束并创建一个添加外键约束的新迁移。

【讨论】:

【参考方案2】:

尝试单独制作。

public function up()

    Schema::create('users', function(Blueprint $table) 
        $table->increments('id');
        $table->integer('costumer_id')->unsigned();
        $table->string('email')->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    );

   Schema::table('users', function($table) 
       $table->foreign('costumer_id')->references('id')->on('costumers');
   );

您可以尝试的另一件事(自 laravel 5.3 起):

unsignedInteger('column_name') instead of ('column_name')-unsigned()

【讨论】:

【参考方案3】:

如果您将一个字段设置为“无符号”,而另一个则没有。一旦你应该将两列都设置为无符号,它就可以工作。

【讨论】:

以上是关于播种时找不到表的主要内容,如果未能解决你的问题,请参考以下文章

项目部署操作linux数据库mysql出现表找不到

播种时LARAVEL 5.4 SQL“找不到列”

java-连接远程mysql,提示表找不到的问题

linux中mysql表名默认区分大小写导致表找不到的问题

使用 cocoapods 时找不到 Mantle/Mantle.h' 文件

初始化节点时找不到值