在 Laravel 中使用 isDirty
Using isDirty in Laravel
我在我的控制器中使用 isDirty()
方法来检查是否有任何字段被更改。然后我将一个字段的旧数据和新数据保存在table
中。代码运行良好;但是,我如何 optimize
这段代码?
通过使用下面的代码,我将不得不一遍又一遍地编写每个字段名称。如果request->all()
有20个字段,但是我想检查6个字段是否被修改,下面的代码如何只传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",
]);
}
我在评论中得到 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",
]);
}
}
您可以设置要检查哪些字段的列表,然后可以遍历脏字段并构建插入记录。
use Illuminate\Support\Arr;
...
$fields = [
'field1' => 'First Name',
'field2' => '...',
...
];
$dirtied = Arr::only($teacher->getDirty(), array_keys($fields));
$inserts = [];
foreach ($dirtied as $key => $value) {
$inserts[] = [
'user_id' => $user->id,
'teacher_id' => $teacher->id,
'old_value' => $teacher->getOriginal($key),
'new_value' => $value,
'column_changed' => $fields[$key];
];
}
DB::table(...)->insert($inserts);
我在我的控制器中使用 isDirty()
方法来检查是否有任何字段被更改。然后我将一个字段的旧数据和新数据保存在table
中。代码运行良好;但是,我如何 optimize
这段代码?
通过使用下面的代码,我将不得不一遍又一遍地编写每个字段名称。如果request->all()
有20个字段,但是我想检查6个字段是否被修改,下面的代码如何只传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",
]);
}
我在评论中得到 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",
]);
}
}
您可以设置要检查哪些字段的列表,然后可以遍历脏字段并构建插入记录。
use Illuminate\Support\Arr;
...
$fields = [
'field1' => 'First Name',
'field2' => '...',
...
];
$dirtied = Arr::only($teacher->getDirty(), array_keys($fields));
$inserts = [];
foreach ($dirtied as $key => $value) {
$inserts[] = [
'user_id' => $user->id,
'teacher_id' => $teacher->id,
'old_value' => $teacher->getOriginal($key),
'new_value' => $value,
'column_changed' => $fields[$key];
];
}
DB::table(...)->insert($inserts);