Eloquent updateOrCreate всегда создавать - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь использовать 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());

У меня есть некоторые пустые поля, но я думаю, это не проблема.

Ответы [ 2 ]

6 голосов
/ 25 апреля 2019

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

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

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

1 голос
/ 25 апреля 2019

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

    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
        ]
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...