簡體   English   中英

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

我計划進行transaction以訪問supplier ,但我收到此錯誤

SQLSTATE [23000]:完整性約束違規:1452 無法添加或更新子行:外鍵約束失敗( inventory transaction_ins_supplier_id_foreign transaction_insSupplier_id _id)參考suppliersid )更新級聯)

我已經嘗試了這個站點和其他站點的解決方案,但仍然無法正常工作。

這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM