在Laravel中使用isDirty

时间:2019-11-08 22:03:39

标签: laravel laravel-6

我在控制器中使用isDirty()方法来检查是否更改了任何字段。然后,我将字段的旧数据和新数据保存在table中。代码工作正常;但是,我怎么optimize这段代码?

通过使用下面的代码,我将不得不一次又一次地写每个字段名称。如果request->all()有20个字段,但是我想检查六个字段是否被修改,如何在下面的代码中仅传递6 fields而不重复?

控制器

if ($teacher->isDirty('field1')) {
    $new_data = $teacher->field1;
    $old_data = $teacher->getOriginal('field1');

    DB::table('teacher_logs')->insert(
        [
            'user_id' => $user->id,
            'teacher_id' => $teacher->id,
            'old_value' => $old_data,
            'new_value' => $new_data,
            'column_changed' => "First Name",
        ]);
}

2 个答案:

答案 0 :(得分:1)

您可以设置要检查的字段的列表,然后可以遍历脏字段并构建插入记录。

fetch(url)
.then(res => res.text())
.then(text => JSON.parse(text.slice(1)))
.then(json => console.log(json.pageItems))

答案 1 :(得分:0)

在通过lagbox在注释中获得想法之后,我尝试了以下代码,并且找到了解决问题的方法。

    $dirty = $teacher->getDirty('field1','field2','field3');
    foreach ($dirty as $field => $newdata)
    {
        $olddata = $teacher->getOriginal($field);
        if ($olddata != $newdata)
        {
            DB::table('teacher_logs')->insert(
                ['user_id' => $user->id,
                    'teacher_id' => $teacher->id,
                    'old_value' => $olddata,
                    'new_value' => $newdata,
                    'column_changed' => "changed",
                ]);
        }
    }