Laravel: 无法插入多对多关系

Laravel: cannot insert into many to many relationship

希望你今天过得愉快。

所以我有这种 ManyToMany 关系,一个用户可以申请多个工作,一个工作可以有多个申请人(用户)。

这里是 table 架构

        Schema::create('applicant_job', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('job_id');
            $table->unsignedBigInteger('applicant_id');

            $table->unique(['job_id', 'applicant_id']);


            $table->foreign('job_id')
                ->references('id')
                ->on('jobs')
                ->onDelete('cascade');


            $table->foreign('applicant_id')
                ->references('id')
                ->on('default_users')
                ->onDelete('cascade');

        });

这是模型代码。

DefaultUser.php

class DefaultUser extends Model
{
  
    public function user()
    {
        return $this->morphOne(User::class, 'userable');
    }

    public function applications()
    {
        return $this->belongsToMany(Job::class, 'applicant_job', 'job_id', 'applicant_id');
    }
}

Job.php

class Job extends Model
{
    public function owner()
    {
        return $this->belongsTo(BusinessUser::class, 'business_user_id');
    }

    public function applicants()
    {
        return $this->belongsToMany(DefaultUser::class, 'applicant_job', 'applicant_id', 'job_id');
    }
}

一切似乎都很好,但当我尝试保存(一个申请工作的用户)时,我收到以下错误

我在里面这样做ApplyToJobController.php


class ApplyToJobController extends Controller
{
    public function store(Job $job, Request $request) {
        $default_user = auth()->user()->userable;

        $job->applicants()->attach($default_user->id);

        return redirect("/en");
    }
}

并且,非常感谢您的回答

编辑

我已将列名更改为此

Schema::create('applicant_job', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('job_id');
            $table->unsignedBigInteger('default_user_id');

            $table->unique(['job_id', 'default_user_id']);


            $table->foreign('job_id')
                ->references('id')
                ->on('jobs')
                ->onDelete('cascade');


            $table->foreign('default_user_id')
                ->references('id')
                ->on('default_users')
                ->onDelete('cascade');

        });

它成功了,我很好奇为什么?

尝试切换在 Job 模型中声明的申请人关系中的外键顺序,如下例所示:

public function applicants()
{
    return $this->belongsToMany(DefaultUser::class, 'applicant_job', 'job_id', 'applicant_id');
}