在“多对一”关系中运行“工匠:迁移”时出现问题

时间:2021-04-17 06:14:16

标签: php laravel

我有一张“人”桌,每个“人”都必须有一些“家具”。

我运行“迁移”并出现此错误消息:

<块引用>

QLSTATE[HY000]:一般错误:1005 无法创建表 my_database.furniture (errno: 150 "外键约束是 格式不正确”)(SQL:alter table furniture 添加约束 furniture_person_id_foreign 外键 (person_id) 引用 people (id))

LARAVEL 版本:5.8

这是我的文件:

2021_04_15_132404_create_persons_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePeopleTable extends Migration
{
   
    public function up()
    {
        Schema::create('people', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('cpf');
            $table->string('phone');
            $table->softDeletes();      
            $table->timestamps();          
        });
    }
  
   
    public function down()
    {
        Schema::dropIfExists('people');
    }
}

2021_04_16_233323_create_furniture_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFurnitureTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('furniture', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('type');
            $table->string('name');
            $table->integer('person_id')->unsignedBigInteger()->nullable();
            $table->foreign('person_id')->references('id')->on('people');
            $table->softDeletes();   
            $table->timestamps();
        });
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('furniture');
    }
}

Person.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Person extends Model
{
    use SoftDeletes;
  
    
}

Furniture.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Furniture extends Model
{
    use SoftDeletes;
}

有人知道怎么解决吗?

1 个答案:

答案 0 :(得分:2)

$table->integer('person_id')->nullable(); 迁移中移除 CreateFurnitureTable,保留 unsignedBigInteger,因为它是整数列类型。根据 Laravel 5.8 的 documentation on foreign keys

,我们也推荐使用 Laravel 推荐的这种方法
$table->unsignedBigInteger('person_id');

$table->foreign('person_id')->references('id')->on('people');