【问题标题】:Laravel 6 - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint failsLaravel 6 - SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败
【发布时间】:2020-02-17 02:02:57
【问题描述】:

我打算将id 上的supplier 发送到transaction_in

但我有这个错误

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (database_name.transaction_ins, 约束 transaction_ins_supplier_id_foreign 外键 (Supplier_id) 参考suppliers (id) 更新级联)(SQL:插入 transaction_ins (Supplier_id, updated_at, created_at) 值 (0, 2019-10-21 07:54:15, 2019-10-21 07:54:15))

这是transaction_in 迁移表

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迁移表

 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);
    }
}

我已经尝试了SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row (Laravel 6)的解决方案

当我从接受的答案运行查询时,它确实返回空,但我不明白这部分

如果你得到一个空的结果集,那么这意味着你的插入是 引用order中不存在的数据。

但是supplier表中确实存在数据

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

这是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();
    }

【问题讨论】:

  • 您所指的那个问题的答案是向您证明您没有与您尝试分配给Supplier_idsupplier 匹配的Supplier_id 看起来

标签: php mysql laravel laravel-6


【解决方案1】:

选择需要一个以选项值应该是什么为键的列表:

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

调整输入名称更准确。

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

LaravelCollective - HTML - Drop-Down Lists

Laravel 6.x Docs - Collections - pluck

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 2017-04-13
    • 2017-11-23
    • 1970-01-01
    • 2018-02-12
    • 2021-09-29
    相关资源
    最近更新 更多