我有三张桌子(公司,分公司,药品)。我希望“公司表”和“分支表”的主键是“药品表”中的外键
class CreateMedicinesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('medicines', function (Blueprint $table) {
$table->increments('id');
$table->Integer('company-id')->unsigned();
$table->foreign('company-id')->references('company')->on('id');
$table->Integer('branch-id')->unsigned();
$table->foreign('branch-id')->references('branch')->on('id');
$table->string('name');
$table->string('type');
$table->string('potency');
$table->timestamps();
});
}
但错误发生了。
Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `medicines` add constraint `medicines_company_id_foreign` for
eign key (`company-id`) references `id` (`company`))
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint.
答案 0 :(得分:0)
可能的解决方案: -
public function up()
{
Schema::create('medicines', function (Blueprint $table) {
$table->increments('id');
$table->integer('company-id')->unsigned(); //Change here like this
$table->foreign('company-id')->references('id')->on('company'); //Change here like this
$table->integer('branch-id')->unsigned(); //Change here like this
$table->foreign('branch-id')->references('id')->on('branch'); //Change here like this
$table->string('name');
$table->string('type');
$table->string('potency');
$table->timestamps();
});
}
确保存在company
和branch
表格。
建议使用
tablename_id
之类的外键。
答案 1 :(得分:0)
始终使用下划线(_)作为外键名称。你以后会感谢我。
发生此错误的原因是您在创建外表之前尝试创建表的外键。 Basicaly 1解决方案是,如果您使用工匠迁移,只需更改迁移文件上的日期,以便公司和分支表具有最早的日期,以便首先创建。或者手动完成,没有别的错误