Laravel 6 - SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено

Я планирую отправить id supplier на transaction_in

но у меня эта ошибка

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (_4 _._ 5_, CONSTRAINT transaction_ins_supplier_id_foreign FOREIGN KEY (Supplier_id) ССЫЛКИ suppliers (id) ON UPDATE CASCADE) (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]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку (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() }} 

и это метод store на контроллере transaction_in

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

person Aditya    schedule 21.10.2019    source источник
comment
ответ на этот вопрос, о котором вы говорите, демонстрирует вам, что у вас нет supplier, совпадающего с id, который вы пытаетесь присвоить Supplier_id, казалось бы   -  person lagbox    schedule 21.10.2019


Ответы (1)


Для выбора необходим список с ключом к предполагаемому значению параметров:

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

Скорректировано имя входа, чтобы оно было более точным.

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

LaravelCollective - HTML - раскрывающиеся списки

Документы Laravel 6.x - Коллекции - pluck

person lagbox    schedule 21.10.2019