我已经看到有一个名为wasChanged()
的函数,您可以在其中检查属性是否在更新时被更改。不是很脏,但是被更改并持续存在
但是我试图在模型事件启动功能中进行检查:
public static function boot()
{
parent::boot();
self::updated(function($appointment){
if($appointment->wasChanged('appointment_date')) {
// do something
}
});
}
这对我永远都行不通。有什么想法可以检查吗?
isDirty函数的行为与用于检查是否已在请求中提交属性的行为不同。
答案 0 :(得分:1)
经过一番搜索,我发现有一个名为getOriginal()
的有用函数,该函数返回原始属性值的数组。
所以我只需要访问我的属性并进行比较:
$original_date = $appointment->getOriginal()['appointment_date'];
if($appointment->appointment_date != $original_date) {
...
}
答案 1 :(得分:0)
虽然这篇文章很旧,但我会插入我的答案,因为你试图解决这个问题的最初方法是最正确的方法。 在使用引导方法之前,您一定弄错了。 我一直在使用它,但我没有看到错误的原因。 下面的代码继续工作。 2021 年刚刚完成了 laravel 5、7 和 8 的测试。
protected static function boot()
{
parent::boot();
self::updated(function ($user) {
if($user->wasChanged('password')){
$user->notify(new PasswordChanged($user));
}
});
}
以下代码于 2021 年更新和测试,非常适合 Laravel 7 和 8。
protected static function booted()
{
self::updated(function ($user) {
if($user->wasChanged('password')){
$user->notify(new PasswordChanged($user));
}
});
}
我放了两个效果很好的形状。 如果您有类似上述的问题,则问题很可能超出了这个范围。
答案 2 :(得分:-1)
U可以检查save()方法是否返回true:
$object = new Model;
$object->attribute = $value;
if($object->save(){
// attribute changed
}