如何在saving判断字段值是否发生改变?如何在saved()获取未修改前的数据?

1.我知道在saved()里,可以用$form->model()->getChanges(‘column’),判断字段值是否发生了改变,但在saving里不能用这个方法,尝试用$form->model()->>getDirty(‘column’)行不通,
目前用的方法是 $form->model()->column!=$form->column,想问下大家有没有更好的方法?

2.如何在form() ->saved()里获取未修改前的数据?

补充

时隔两年又发生了这个问题,然后发现自己当时的提问并不正确, 这里补充下
laravel-admin 版本 1.7.6
Laravel 版本 5.8
PHP 版本 7.3.1
win7
标题应是 如何在$form->saving()和$form->saved(),获取修改前的数据
1.在$form->saving()里

$form->saving(function($form){
    //1.1获取某一个字段name修改前数据,如下,
    $form->model()->name
    //1.2获取所有修改了值的字段,目前还是没找方法
})

2.在$form->saved()里

    //2.1获取某一个字段name修改前数据
    $form->builder()->fields()[1]->original();//数字1表示该字段在$form->展示时的位置索引值,如下
    $form->display('title', '标题');//对应$form->builder()->fields()里的索引0
    $form->text('name','名称');//对应$form->builder()->fields()里的索引1
    //2.2获取所有修改了值的字段,但不能找到修改前的值
    $form->model()->getChanges();

3.我自己想到了一个笨方法,但有效

//3.1 获取当前模型id,假设当前控制器命名为NewsController
$id=request()->route()->parameters()['news']??0;
$news=News::find($id)->toArray();
$form->saved(function($form)use($news){
    $changes=$form->model()->getChanges();
    $before=array_intersect_key($news,$changes);//得到修改前数据
})
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
  • 未修改之前 $user->getOriginal('status')
  • 判断是否修改 $user->isDirty('status')
3年前 评论
讨论数量: 2
  • 未修改之前 $user->getOriginal('status')
  • 判断是否修改 $user->isDirty('status')
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!