![](/img/trans.png)
[英]Laravel - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
[英]Laravel 6 - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
我計划進行transaction
以訪問supplier
,但我收到此錯誤
SQLSTATE [23000]:完整性約束違規:1452 無法添加或更新子行:外鍵約束失敗(
inventory
transaction_ins_supplier_id_foreign
transaction_ins
(Supplier_id
_id)參考suppliers
(id
)更新級聯)
我已經嘗試了這個站點和其他站點的解決方案,但仍然無法正常工作。
這是transaction migration
public function up()
{
Schema::create('transaction_ins', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('idTransactionIN');
$table->date('tanggal_transaksi');
$table->unsignedBigInteger('Supplier_id')->nullable();
$table->timestamps();
$table->foreign('Supplier_id')->references('id')->on('suppliers')->onUpdate('cascade');
});
}
model
class Transaction_in extends Model
{
protected $table = 'transaction_ins';
protected $primaryKey = 'idTransactionsIN';
public $timestamps = true;
public $incrementing = false;
protected $guarded = [];
public static function getidTransactionsIN(){
DB::table('transaction_ins')->orderBy('id','desc')->take(1)->get();
}
public function suppliers(){
return $this->belongsTo(Supplier::class);
}
}
這是 controller 的存儲方法
public function store(Request $request)
{
$request->validate([
'supplier_name' => 'required',
'transaction_in_date' => 'required',
]);
Transaction_in::getidTransactionsIN();
$newtransaction_inId = Transaction_in::max('id') + 1;
$Getnewtransaction_inId = sprintf('TIN%04d', $newtransaction_inId);
$transaction_in = new Transaction_in();
$transaction_in->idTransactionIN = $Getnewtransaction_inId;
$transaction_in->Supplier_id = $request->input('supplier_name');
$transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
$transaction_in->save();
return 123;
}
這是供應商 model
class Supplier extends Model
{
protected $table = 'suppliers';
protected $primaryKey = 'idSupplier';
public $timestamps = true;
public $incrementing = false;
protected $guarded = [];
public static function getidSupplier(){
DB::table('suppliers')->orderBy('id','desc')->take(1)->get();
}
public function transactions_in(){
return $this->hasMany(Transaction_in::class);
}
}
最有可能發生此錯誤是因為inventory
表中的Supplier_id
列中的值引用了suppliers.id
中不存在的值。 對 MySQL 運行以下原始查詢以清除此類違規記錄:
SELECT *
FROM inventory i
WHERE NOT EXISTS (SELECT 1 FROM suppliers s WHERE s.id = i.Supplier_id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.