model = new ModelFieldsModel; } /** * @title: 创建统一查询条件 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 14:08:58 */ private function createWhere() { $data = $this->request->param(); return array_filter([ !empty($data['model_name']) ? ['model_name','=',$data['model_name']] : null, !empty($data['field_type']) ? ['field_type','=',$data['field_type']] : null, !empty($data['db_type']) ? ['db_type','=',$data['db_type']] : null, !empty($data['show_in_table']) ? ['show_in_table','=',$data['show_in_table']] : null, !empty($data['search_type']) ? ['search_type','=',$data['search_type']] : null, !empty($data['status']) ? ['status','=',$data['status']] : null, !empty($data['keyword']) ? ['model_name|model_title','=',$data['keyword']] : null, ]); } /** * @title: 获取模型字段列表 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 11:28:27 */ public function getList(int $pageNo=0,int $pageSize = 20) { $where = $this->createWhere(); if($pageNo){ $res = $this->model->where($where)->order('weigh ASC')->paginate(['page'=>$pageNo,'list_rows'=>$pageSize]); return pageRes(1,"获取成功",$res->total(),$res->items()); } $list = $this->model->where($where)->order('weigh ASC')->select(); return res(1,"获取成功",$list); } /** * @title: 新增/编辑模型字段 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 11:28:13 */ public function doEdit() { $data = $this->request->param(); try{ Db::startTrans(); if(empty($data['field_id'])){ $data['model_title'] = ModelManage::where('name',$data['model_name'])->value('title'); $this->model->replace()->save($data); $id = $this->model->field_id; $res = ModelFieldsModel::addField($id); }else{ $oldField = $this->model->where('field_id',$data['field_id'])->value('field'); $this->model->replace()->save($data); $id = $this->model->field_id; $res = ModelFieldsModel::updateField($id,$oldField); } Db::commit(); return res(1,"编辑成功,请重新生成代码",$id); }catch(\Exception $e){ Db::rollback(); $msg = $e->getMessage(); if(false!==strpos($msg,'1067 Invalid default value for')){ return res(2,"默认值与数据类型不匹配"); }elseif(false!==strpos($msg,'Column already exists')){ return res(2,"字段名已存在"); } return res(2,"编辑失败",$e->getMessage(),$e->getTrace()); } } /** * @title: 删除模型字段 * @desc: 描述 * @param {int} {field_id} {} {模型字段ID} * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 11:27:40 */ public function doDelete(int $field_id = 0) { $info = $this->model->find($field_id); if(!$info){ return res(2,"未找到记录"); } try{ Db::startTrans(); ModelFieldsModel::deleteField($field_id); $info->delete(); Db::commit(); return res(1,"删除成功,请重新生成代码"); }catch(\Exception $e){ Db::rollback(); return res(2,"删除失败",$e->getMessage(),$e->getTrace()); } } /** * @title: 启用禁用模型字段 * @desc: 描述 * @param {int} {field_id} {} {模型字段ID} * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 11:27:28 */ public function changeStatus(int $field_id = 0) { $info = $this->model->find($field_id); if(!$info){ return res(2,"未找到记录"); } $info->status = abs(3*$info->status - 5); $info->save(); return res(1,"操作成功,请重新生成代码"); } /** * @title: 获取模型字段可选项 * @desc: 描述 * @return {*} * @author: Rock * @method: POST * @Date: 2023-04-13 14:25:30 */ public function getOptions() { $data = [ 'fieldTypeList' =>ModelFieldsModel::fieldTypeList(), 'dbTypeList' =>ModelFieldsModel::dbTypeList(), 'showInTableList' =>ModelFieldsModel::showInTableList(), 'searchTypeList' =>ModelFieldsModel::searchTypeList(), 'statusList' =>ModelFieldsModel::statusList() ]; return res(1,"获取成功",$data); } /** * @title: 保存模型的多个字段 * @desc: 描述 * @param {string} {model_name} {} {模型名} * @param {array} {list} {} {字段列表} * @return {*} * @author: Rock * @method: POST * @Date: 2023-08-29 15:30:32 */ public function saveList($model_name='',$list=[]) { $data = $this->request->param(); $fields = $this->model->where('model_name',$model_name)->column('field'); if(!empty($fields)){ ModelFieldsModel::deleteFields($model_name,$fields); $this->model->destroy(function($query)use($model_name){ $query->where('model_name',$model_name); }); } $newList = []; foreach($list as $item){ if(isset($item['field_id'])){ unset($item['field_id']); } $newList[] = $item; } $this->model->replace()->saveAll($newList); $fields = $this->model->where('model_name',$model_name)->column('field'); ModelFieldsModel::addFields($model_name,$fields); return res(1,"保存成功"); } }