在开发过程中,尤其是内部管理(CRM)、SaaS系统,经常性的会需要对每一步操作进行记录,尤其是修改过的内容,更需要完整性的展示出来,那么操作日志就必不可少。
首先,要获取到对应表的字段名称,在根据前端传来的值进行查找,将查找出来的数据进行比对
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
/**
* @param $request 传的值
* @param $table 表名称
* @param $id 要修改的数据
*/
public static function logDesc($request, $table, $id) {
$fieldName = Schema::getColumnListing($table); // 获取对应表的字段名
$input = $request->only($fieldName);
$value = array_values($input); // 获取value,用作对比
$field = array_keys($input); // 获取键,查找字段
// 查找对应表中数据
$data = DB::table($table)->where('id', $request->id)->get($field)->toArray();
$data = array_values(json_decode(json_encode($data[0]),true));
// $a 是传值的参数 $b 是表里的参数 获取不一致的内容
$result = array_map(function($a, $b){
// 假设有数组的参数,转换展示
if (is_array($a)) {
$a = implode('、', $a);
$b = implode('、', json_decode($b, true));
}
if ($a != $b) {
return array($a, $b);
}
}, $value, $data);
// 将修改过的内容记录
$content = [];
foreach ($result as $v) {
if (!$v) {
continue;
}
$content[] = $v[1] .' 修改为 ' . $v[0];
}
$content = implode(';', $content);
return $content;
}
仅是我个人浅见,如有更好意见,希望能够交流一番