使用 Laravel 的事件功能时,很多时候我们有这样的需求:在事件中获取模型的原始值或指定字段修改之前的值,与当前值进行对比。
使用original
方法访问对象的原始属性:
class UserObserver
{
public function updated(User $user)
{
$originalData = $user->original; // 获取原始数据数组
// 你可以在这里处理原始数据,例如记录日志或进行其他操作
dd($originalData); // 输出原始数据,例如 email 或其他字段的原始值
}
}
使用 getOriginal
方法获取模型属性在最后一次保存操作之前的值
class UserObserver
{
public function updated(User $user)
{
$originalName = $user->getOriginal('name'); // 获取修改前的标题
$currentName = $user->name;// 获取当前标题
// 比较并处理
if ($originalName !== $currentName) {
// 处理逻辑
}
}
}
使用 isDirty
方法与 getDirty
方法获取被修改的属性及其原始值
class UserObserver
{
public function updated(User $user)
{
// 获取所有被修改的属性及其新值
$dirtyAttributes = $post->getDirty();
// 判断指定属性是否被修改了
if ($user->isDirty('age')) { //如果是更新了age字段则执行下方代码
$user->number; //更新之后的age字段数据
$user->getOriginal('age'); //更新之前的age字段数据
}
}
}