我正在尝试使用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());


我有一些可为空的字段,但我认为这不是问题。

最佳答案

updateOrCreate方法采用两个数组参数:


第一个是字段=> values的数组,将用作检查该行是否存在的条件。
第二个是字段数组=>要更新的值(如果记录与第一个参数的条件匹配)或要添加的值(如果找不到匹配项,则与第一个参数合并)。


因此,我猜Jesus answer可能是适合您的选择。

关于php - Eloquent updateOrCreate总是创建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55839663/

10-11 03:14