无法插入数据透视表 table

Can't insert into pivot table

我的数据库中有一个数据透视表 table,它结合了用户和贷款。 table 如下。


user_id
loan_id
amount

现在我有以下代码将数据插入数据库


    $user = User::find(2);
    $user->loans()->create([
        // Some database insertion
    ]);

    $user->loans()->attach(2, ['amount' => '500']);

我收到这个错误...

Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1364 Field 'amount' doesn't have a default value (SQL: insert into `loan_user` (`loan_id`, `user_id`) values (42, 2)) in file G:\Development\final-project\backend\vendor\laravel\framework\src\Illuminate\Database\Connection.php

我的贷款和用户之间存在多对多关系,我还有名为 loan_user 的数据透视表 table。 我在这里做错了什么?

编辑

这是我的枢轴的迁移table

    Schema::create('loan_user', static function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('loan_id');
        $table->unsignedBigInteger('user_id');
        $table->integer('amount');
        $table->timestamps();
    });

重要的事情

我使该金额列可以为空。然后它没有抛出任何错误,但有时金额为 500,有时为空。我不知道发生了什么。

解决方案

我通过先创建贷款然后将其附加到用户和数据透视金额来解决这个问题。像这样。

    $loan = Loan::create([
        // something
    ]);

    $user->loan()->attach(['amount' => 500]);

你必须这样使用

return $this->belongsToMany('App\Loan', 'amount')->withPivot('amount');

并且如果您一次插入多行,那么您必须像这样使用

$user->loans()->attach('2',['amount'=>500]);

For More details

您正在尝试通过多对多关系创建记录,这就是它失败的原因。相反,您可以单独创建贷款并附加如下内容:

$loan = Loan::create([
    // data
]);

$user->loans()->attach(
    $loan, [
        'amount' => 500,
    ]
);

此外,您的 loans 关系应该如下所示:

public function loans(): BelongsToMany
{
    return $this->belongsToMany(Loan::class)
        ->withPivot('amount')
        ->withTimestamps();
}

这将在查询时将金额添加到数据透视表中。

参考文献:https://laravel.com/docs/eloquent-relationships#attaching-detaching