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
发送 id
给 transaction_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.
但数据确实存在于supplier
table
我应该怎么做才能解决这个问题?
这是 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'], ...);
我打算在 supplier
发送 id
给 transaction_in
但是我有这个错误
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
database_name
.transaction_ins
, CONSTRAINTtransaction_ins_supplier_id_foreign
FOREIGN KEY (Supplier_id
) REFERENCESsuppliers
(id
) ON UPDATE CASCADE) (SQL: insert intotransaction_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.
但数据确实存在于supplier
table
我应该怎么做才能解决这个问题?
这是 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'], ...);