我正在尝试使用isDirty()
检测模型何时获得更新以及何时没有更新,是否缺少某些东西?
$user = User::updateOrCreate(['email' => $line['Email']],[
'username' => $line['Username'],
'fname' => $line['First_name'],
'lname' => $line['Surname'],
'email' => $line['Email'],
]);
dd($user->isDirty()); // always return false
User::updating(function ($user) {
dd($user->isDirty()); // always returns true
});
答案 0 :(得分:1)
该函数用于更多类似这样的事情:
// $user = user pulled from database
$user->isDirty(); // returns false
$user->name = "newName";
$user->email = "newEmail@email.com";
$user->isDirty(); // returns true
$user->save();
$user->isDirty(); // returns false
答案 1 :(得分:0)
您只是在查询数据库而不更新模型
如果您想知道自数据库上次同步以来 model 或给定属性是否已更改,isDirty 函数将起作用。
答案 2 :(得分:0)
Laravel isDirty()
函数:
调用updateOrCreate
方法时,将保存您的模型数据。因此,在调用isDirty()
之后,方法始终返回false。因为数据已经保存。
User::updateOrCreate()
Laravel updating()
表示为更新而收集的数据,但您知道的不是更新的。
使用idDirty()
您可能会想出一种情况,要检查给定的Eloquent属性与原始存储值相比是否已更改。
答案 3 :(得分:0)
如果要确定用户是created
还是updated
,则可以执行以下操作:
如果创建了用户:
$user->wasRecentlyCreated
如果用户已更新且值已更改:
$user->wasChanged()
请注意,如果未进行任何更改,它将返回false