Laravel UpdateOrCreate在创建时和更新时的数值不同

3

有没有类似于UpdateOrCreate的方法,可以在创建时和更新时使用不同的值。也就是说,如果正在更新,我不想更改某个列,但第一次插入时我希望它能够插入。

$person = ['name'=> 'John', 'age' => 6, 'joined' => '2017-01-01'];

如果John存在,则更新年龄。如果不存在,则插入年龄和加入时间;
People::updateOrCreate(
            ['name' => $person['name']],
            ['age' => $person['age'], 'joined' => $person['joined']]
        )

每次更新都会加入,我不想改变它。

2个回答

3

您可以使用updateOrNew方法来更新模型,但不会将其持久化到数据库中,然后检查它是否已经存在于数据库中,如果不存在,您可以更改要更改的属性。

$record = People::updateOrNew(
        ['name' => $person['name']],
        ['age' => $person['age']]
);

if(!$record->exists()) {
    $record->joined = $person['joined'];
}

$record->save();

如果你只是想获取已存在的记录,如果不存在则创建新记录,可以使用 firstOrCreate()。这不会影响已存在的记录,只会返回它们,并在记录不存在时创建它。


1
updateOrNew 似乎不是一个真实的方法。 - jxxe

1

除此之外,您可以尝试以下方法:

 $person = People::where('name', $name)->first();
  
        if (!is_null($person)) {
            $person->update([
                'age' => $age
            ]);
        }else{
            $person = People::create([
                'name' => $name,
                'age' => $age,
                'joined' => date('Y-m-d')
            ]);
        }  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接