gpt4 book ai didi

Laravel 检查 updateOrCreate 是否执行了更新

转载 作者:行者123 更新时间:2023-12-01 23:51:28 30 4
gpt4 key购买 nike

我的 Controller 中有以下代码:

for($i=0; $i<$number_of_tourists; $i++) {
$tourist = Tourist::updateOrCreate([
'doc_number' => $request['doc_number'][$I]
],
$tourist_to_update);
}

每次updateOrCreate运行时,它都会执行以下三件事之一:

  1. 更新模型实例;或

  2. 创建并保存一个新的;或

  3. 保持所有内容不变(如果具有此类值的模型已存在)

我需要检查updateOrCreate是否已完成第一个(更新),然后执行一些代码。

我该怎么做?

最佳答案

你可以这样算:

$tourist = Tourist::updateOrCreate([...]);

if(!$tourist->wasRecentlyCreated && $tourist->wasChanged()){
// updateOrCreate performed an update
}

if(!$tourist->wasRecentlyCreated && !$tourist->wasChanged()){
// updateOrCreate performed nothing, row did not change
}

if($tourist->wasRecentlyCreated){
// updateOrCreate performed create
}
<小时/>

备注

从 Laravel 5.5 开始,您可以使用 wasChangedisDirty 方法检查更新是否实际发生。

  • 如果模型属性已更改但未保存,isDirty() 为 true。
  • wasChanged() 如果模型属性已更改并保存,则为 true。

还有一个属性(不是方法!)wasRecentlyCreated 来检查用户是否已创建。

$user = factory(\App\User::class)->create();

$user->wasRecentlyCreated; // true
$user->wasChanged(); // false
$user->isDirty(); // false

$user = \App\User::find($user->id);

$user->wasRecentlyCreated; // false
$user->wasChanged(); // false
$user->isDirty(); // false

$user->firstname = 'Max';

$user->wasChanged(); // false
$user->isDirty(); // true

$user->save();

$user->wasChanged(); // true
$user->isDirty(); // false

//You can also check if a specific attribute was changed:
$user->wasChanged('firstname');
$user->isDirty('firstname');

您可以查看 laravel 文档的 wasChanged 和 isDirty 方法的链接。

https://laravel.com/docs/8.x/eloquent#examining-attribute-changes或者 https://laravel.com/docs/9.x/eloquent#examining-attribute-changes

关于Laravel 检查 updateOrCreate 是否执行了更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45702409/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com