Eloquent updateOrCreate всегда создавать

Я пытаюсь использовать updateOrCreate для упрощения своего кода, но функция ВСЕГДА создает новую строку, а не обновляет.

Моя миграция:

        Schema::create('logs', function (Blueprint $table) {
         $table->bigIncrements('id');
         $table->integer('project_id')->unsigned();
         $table->datetime('is_fixed')->nullable();
         $table->datetime('snooze_until')->nullable();
         $table->integer('snooze_while')->nullable();
         $table->string('title', 100);
         $table->string('level', 100);
         $table->string('description');
         $table->string('stage',100);
         $table->json('details')->nullable();
         $table->timestamps();

         $table->foreign('project_id')->references('id')->on('projects');
        });

Мои $fillables

protected $fillable = [
    'project_id', 
    'is_fixed', 
    'snooze_until', 
    'snooze_while', 
    'title', 
    'level', 
    'description', 
    'stage',
    'details'
];

Мой тест

    $log = new Log();

    $log->fill([
        'title' => 'Vicente\\Sally\\Schiller',
        'level' => 'ERROR',
        'description' => 'Laboriosam et architecto voluptatem.',
        'stage' => 'production@wender-fedora',
        'details' => '{"app":"MyApp"}',
        'project_id' => 5
    ]);

    Log::updateOrCreate($log->toArray());

У меня есть поля, допускающие значение NULL, но я считаю, что это не проблема.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 252
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы хотите попробовать это:

    Log::updateOrCreate(
        [
            'title' => 'Vicente\\Sally\\Schiller',
            'project_id' => 5
        ], 
        [
            'title' => 'Vicente\\Sally\\Schiller',
            'level' => 'ERROR',
            'description' => 'Laboriosam et architecto voluptatem.',
            'stage' => 'production@wender-fedora',
            'details' => '{"app":"MyApp"}',
            'project_id' => 5
        ]
    );
Ответ принят как подходящий

Метод updateOrCreate принимает два параметра массива:

  • Первый — это массив полей => значений, которые будут использоваться в качестве условия для проверки существования строки.
  • Второй — это массив полей => значений, которые нужно обновить (в случае совпадения записи с условиями из первого параметра) или добавить (объединить с первым параметром, если совпадений не найдено).

Так что я думаю, что Иисус ответ может быть правильным для вас.

Другие вопросы по теме