TransWikia.com

laravel проблемы с "a foreign key constraint fails"

Stack Overflow на русском Asked by RizONE on January 1, 2021

Модель организована с 2я внешними ключами:

public function up()
    {
        Schema::create('workers', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained();
            $table->foreignId('organization_id')->constrained();
            $table->boolean('active');
            $table->timestamps();
        });
    }

в шаблоне выводятся поля для пользователя и организации для последующего выбора

<label for="user_id" class="block text-sm font-medium text-gray-700">Пользователь</label>
                <select id="user_id" name="user_id" autocomplete="country" class="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">
                  @foreach($users as $user)
                    <option value="{{ $user->id }}">{{ $user->name }}</option>
                  @endforeach
                </select>

обрабатывает это все одна функция

ublic function store() {
        $this->validate([
            'user_id' => 'required',
            'organization_id' => 'required',
        ]);

        Worker::updateOrCreate(['id' => $this->worker_id], [
            'user_id' => $this->user_id,
            'organization_id' => $this->organization_id,
            'active' => $this->active
        ]);

        $this->closeModal();
        $this->resetInputFields();
    }

в результате получаю ошибку типа

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a child row: a foreign key constraint fails (bill.workers,
CONSTRAINT workers_user_id_foreign FOREIGN KEY (user_id)
REFERENCES users (id)) (SQL: insert into workers (user_id,
organization_id, active, updated_at, created_at) values (0, 0,
1, 2020-12-19 18:18:43, 2020-12-19 18:18:43))

хотя значения полей user_id organization_id передаются корректно. Подставляются 0 и 0. Как это вылечить?

3 Answers

Вопрос снимается. Ничего делать не надо. Как я понял, вся проблема была в правильном написании шаблона, а именно за место name нужно писать wire:model

Answered by RizONE on January 1, 2021

Вероятно у вас в миграции отсутствует nullable перед constrained. У вас вряд ли есть пользователь и организация с id 0.

Answered by DKWBL on January 1, 2021

Laravel Request

use IlluminateHttpRequest;

public function store(Request $request) {
    $this->validate([
        'user_id'         => 'required',
        'organization_id' => 'required',
    ]);

    Worker::updateOrCreate(['id' => $request->worker_id], [
        'user_id'         => $request->user_id,
        'organization_id' => $request->organization_id,
        'active'          => $request->active
    ]);

    $this->closeModal();
    $this->resetInputFields();
}

Answered by Knyaz71 on January 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP