我正在尝试迁移包含关系的两个单独的表:
第一张桌子:
public function up()
{
Schema::create('Gerecht', function (Blueprint $table) {
$table->increments('Gerechtcode');
$table->string('Gerecht', 20);
$table->foreign('Gerechtcode')->references('Gerechtcode')->on('Subgerecht');
});
}
第二张表:
public function up()
{
Schema::create('Subgerecht', function (Blueprint $table) {
$table->increments('SubgerechtCode');
$table->string('Gerechtcode',3 );
$table->string('Subgerecht', 25);
$table->foreign('Gerechtcode')->references('Gerechtcode')->on('Gerecht');
});
}
但是它给我一个如下错误:
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table `excellent-taste-db`.`#sql-59c_7d` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `Gerecht` add constraint `gerecht_gerechtcode_foreign` foreign key (`Gerechtcode`) references `Subgerecht` (`Gerechtcode`))
答案 0 :(得分:0)
您的迁移格式不正确。首先,主键和外键必须是同一类型,在您的情况下,由于主键使用laravel的increments
方法,因此外键应为unsigned integer
。其次,您将第一个表中的主表设置为同一表中的外部表,这是完全错误的。
您的迁移应如下图所示
第一张桌子
public function up()
{
Schema::create('Gerecht', function (Blueprint $table) {
$table->increments('Gerechtcode');
$table->string('Gerecht', 20);
});
}
第二张表
public function up()
{
Schema::create('Subgerecht', function (Blueprint $table) {
$table->increments('SubgerechtCode');
$table->unsignedInteger('Gerechtcode');
$table->string('Subgerecht', 25);
$table->foreign('Gerechtcode')->references('Gerechtcode')->on('Gerecht');
});
}
您可以查看documentation以获得更多信息。
答案 1 :(得分:0)
在您的第一张桌子上:
public function up()
{
Schema::create('Gerecht', function (Blueprint $table) {
$table->increments('Gerechtcode');
$table->string('Gerecht', 20);
$table->foreign('Gerechtcode')->references('Gerechtcode')->on('Subgerecht');
});
}
您正在使用主键(Gerechtcode)来引用另一个表。这是不可能的。我认为,如果您将第一张表更改为:
public function up()
{
Schema::create('Gerecht', function (Blueprint $table) {
$table->increments('Gerechtcode');
$table->unsignedInteger('SubgerechtCode');
$table->string('Gerecht', 20);
$table->foreign('SubgerechtCode')->references('Gerechtcode')->on('Subgerecht');
});
}
和第二张表:
public function up()
{
Schema::create('Subgerecht', function (Blueprint $table) {
$table->increments('SubgerechtCode');
$table->string('Subgerecht', 25);
});
}
通过这种方式,您可以在Laravel中处理一对多关系。但是您的代码不允许我理解您的需求。