Laravel 6 - SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败

Laravel 6 - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

我打算在 supplier 发送 idtransaction_in

但是我有这个错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (database_name.transaction_ins, CONSTRAINT transaction_ins_supplier_id_foreign FOREIGN KEY (Supplier_id) REFERENCES suppliers (id) ON UPDATE CASCADE) (SQL: insert into transaction_ins (Supplier_id, updated_at, created_at) values (0, 2019-10-21 07:54:15, 2019-10-21 07:54:15))

这是transaction_in迁移table

public function up()
    {
        Schema::create('transaction_ins', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->date('tanggal_transaksi');
            $table->unsignedBigInteger('Supplier_id');
            $table->timestamps();

            //Foreign Key
            $table->foreign('Supplier_id')->references('id')->on('suppliers')->onUpdate('cascade');
        });
    }

transaction_in 型号

class Transaction_in extends Model
{
    protected $guarded = [];

    public function suppliers(){
        return $this->belongsTo(Supplier::class);
    }
}

这是supplier迁移table

 public function up()
    {
        Schema::create('suppliers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('nama');
            $table->timestamps();
        });
    }

supplier 型号

class Supplier extends Model
{
    protected $guarded = [];

    public function transactions_in(){
        return $this->hasMany(Transaction_in::class);
    }
}

我已经尝试了

的解决方案

当我 运行 来自已接受答案的查询时,它 return 是空的,但我不明白这部分

If you get back an empty result set, then it means your insert is referring to data in order which does not exist.

但数据确实存在于suppliertable

我应该怎么做才能解决这个问题?

这是 create.blade.php transaction_in

{{ Form::open(['action' => 'TransactionsINController@store', 'method' => 'POST']) }}
        <div class="form-group">
            {{ Form::label('supplier_name', 'Supplier Name') }}
            {{ Form::select('supplier_name', $supplierList->pluck('nama'), null, ['class' => 'form-control', 'placeholder' => 'Pick one Supplier...']) }}
        </div>
        <hr>
        {{ Form::button('<i class="far fa-save"></i> Submit', ['type' => 'submit', 'class' => 'btn btn-info'] )  }}
{{ Form::close() }} 

这是 transaction_in 控制器上的 store 方法

public function store(Request $request)
    {
        $request->validate([
            'supplier_name' => 'required'
        ]);

        $transaction_in = new Transaction_in();
        $transaction_in->Supplier_id = $request->input('supplier_name');
        $transaction_in->save();
    }

select 需要一个由选项值应该是什么作为关键字的列表:

Form::select('supplier_id', $supplierList->pluck('nama', 'id'), null, ....);

调整了输入名称以更准确。

Form::select('size', ['L' => 'Large', 'S' => 'Small'], ...);

LaravelCollective - HTML - Drop-Down Lists

Laravel 6.x Docs - Collections - pluck