Laravel UpdateOrCreate在Create on Update上是不同的值



是否有像UpdateOrCreate这样的东西,我可以在创建和更新时使用不同的值。意思是如果它正在更新,我不希望它改变某一列,但我希望它插入第一次。如

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

如果John存在,则更新年龄。如果没有插入age和joined;

People::updateOrCreate(
['name' => $person['name']],
['age' => $person['age'], 'joined' => $person['joined']]
)

每次都会更新join,我不想更改它。

您可以使用updateOrNew,它不会将其持久化到数据库中,然后检查它是否已经在数据库中,您可以更改您想要更改的属性。

$record = People::updateOrNew(
['name' => $person['name']],
['age' => $person['age']]
);
if(!$record->exists()) {
$record->joined = $person['joined'];
}
$record->save();

但是,如果您只是试图获取记录,如果它存在,创建它,如果它不存在,使用firstOrCreate()代替。这不会影响现有的记录,只返回它们,如果它不存在,它将创建记录。

您可以尝试以下任何其他选项:

$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')
]);
}  

最新更新