1, 'user_id' => 1, 'user_name' => 1, 'crt_time' => 123456, 'data' => [ [ 'key' => '金额', 'old_data' => '100', 'new_data' => '200', ] ] ] ]; return [true,$data]; } // public function public function insertOperationLog($insert){ try { DB::beginTransaction(); $menu_id = $insert['menu_id']; $user_id = $insert['user_id']; $ip = $insert['ip']; $parent_id = $insert['parent_id']; $type = $insert['type']??2; $logModel = new OperationLog(); $logModel->user_id = $user_id; $logModel->ip = $ip; $logModel->menu_id = $menu_id; $logModel->type = $type; $logModel->parent_id = $parent_id; $logModel->save(); $LogParent_id = $logModel->id; if($type == 2){ $sub_datas = []; $relationship_datas = []; $table_Data = $insert['table_data']; $sub_table_data = $insert['sub_table_data'] ?? []; $relationship_table_data = $insert['relationship_table_data'] ?? []; $table_Data = $this->findTableDatas($table_Data); if(!empty($sub_table_data)) { foreach ($sub_table_data as $v){ $sub_data = $this->findTableData($v); $sub_datas = array_merge($sub_datas,$sub_data); } } if(!empty($relationship_table_data)) { foreach ($sub_table_data as $v){ $relationship_data = $this->findTableData($relationship_table_data); $relationship_datas = array_merge($relationship_datas,$relationship_data); } } $insert_detail_data = array_merge($table_Data,$sub_datas,$relationship_datas); $table_Data = $this->dealOperationLogDetail($insert_detail_data,$LogParent_id); OperationLogDetail::insert($table_Data); } DB::commit(); return [true,'']; }catch (\Exception $e){ DB::rollBack(); return [false,$e->getLine().':'.$e->getMessage()]; } } public function dealOperationLogDetail($data,$log_id){ foreach ($data as $k=>$v){ $data[$k]['log_id'] = $log_id; } return $data; } public function findTableData($data){ $table = $data['table']; $param = $data['param']; $parent_id = $data['parent_id']; $parent_key = $data['parent_key']??'id'; $model = DB::table($table)->where($parent_key,$parent_id); $select_list = []; $new_data_list = []; foreach ($param as $v){ $select_list[] = $v['key']; $new_data_list[$v['key']] = [ 'new_data' => $v['value'], 'parent_id' => $parent_id, ]; } $detail = $model->select($select_list)->first()->toArray(); foreach ($new_data_list as $k=>$v){ $new_data_list[$k]['old_data'] = $detail[$k]; } sort($new_data_list); return $new_data_list; } public function findTableDatas($data){ $table = $data['table']; $parent_id = $data['parent_id']; $parent_key = $data['parent_key']??'id'; $key = $data['key']; $value = $data['value']; $model = DB::table($table)->where($parent_key,$parent_id); $old_data = implode(',',$model->where($parent_key,$parent_id)->pluck($key)->toArray()); return [['old_data'=>$old_data,'new_data'=>implode(',',$value),'parent_id'=>$parent_id]]; } public function setParam() { //3种格式类型,1:单张表数据更新,只需要数组种有key,value;2.子表更新,也是单条数据更新只需要数组种有key,value;3.子表更新,但是是删除数据更新,则传old data 和 new data $insert = [ 'menu_id'=>1, 'user_id'=>'1', 'ip'=>'1', 'parent_id'=>'1', 'table_data'=>[ 'table'=>'table', 'parent_id'=>'1', 'param'=>[ [ 'key' => 'd', 'value' => 'd', ] ] ], 'sub_table_data'=>[ [ 'table'=>'table', 'parent_id'=>'1', 'parent_key'=>'1', 'param'=>[ [ 'key' => 'd', 'value' => 'd', ] ], ] ], 'relationship_table_data'=>[ [ 'table'=>'table', 'parent_id'=>'table', 'parent_key'=>'table', 'key'=>'title', 'value'=>[1,2,3,4,5], ] ] ]; } }