我正在学习laravel,现在我无法迁移数据库。我已经在phpmyadmin中创建了数据库,已阅读文档并在网上对该问题进行了研究。但是,当我进行迁移时,它会不断发送相同的消息:
SQLSTATE[HY000]: General error: 1005 Can't create table `YYYY`.`#sql-269c_1c1` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table ` cars` add constraint `cars_company_id_foreign` foreign key (`Company_id`) references `companies` (`id`) on delete cascade on update cascade)
这是代码:
2014_10_12_000000_create_cars_table
Schema::create('cars', function (Blueprint $table) {
$table->increments('id');
$table->integer('Company_id')->unsigned();
$table->foreign('Company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade');
$table->string('Model');
});
2014_10_12_000000_create_companies_table
Schema::create('companies', function (Blueprint $table) {
$table->increments('id');
$table->string('Company');
});
答案 0 :(得分:1)
Laravel尝试按1)时间顺序运行迁移,2)字母表。由于您同时进行了两次迁移,因此按字母顺序排列。
这在实践中意味着您首先尝试创建汽车表,外键约束指向表公司 - 但此表尚不存在,因为它将在下一次迁移中创建
正确命名您的迁移,它应该自行解决。 :)
答案 1 :(得分:1)
是的Joel Said在迁移命名约定上要小心。 要避免这些错误,您可以使用迁移命令
<强>步骤1 强>
从命令行运行以下
php artisan make:migration create_companies_table
step2
这将在您的数据库中生成空白迁移架构,然后按如下所示进行编辑
Schema::create('companies', function (Blueprint $table) {
$table->increments('id');
$table->string('Company');
});
第3步 从命令行运行以下
php artisan make:migration create_companies_table
第4步 这将在您的数据库中进行空白迁移模式,然后按如下所示进行编辑
Schema::create('cars', function (Blueprint $table) {
$table->increments('id');
$table->integer('Company_id')->unsigned();
$table->foreign('Company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade');
$table->string('Model');
});