🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 模型添加·思路分析 > 模型添加思路分析(变动三张表): 1、数据表models中一条模型记录 2、数据表models_field中添加公共字段(系统字段为1,公共字段对应模型ID) 3、添加新模型的数据表(私有字段) ## 1、判断数据表是否存在 ~~~ $data = input('post.'); if(trim($data['tablename'])==''){ return error('新模型表名不能为空!'); exit(); } ~~~ ## 2、判断新模型是否存在(数据表models中是否存在相应的模型信息) ~~~ $models = new ModelsModel; if($models::where('tablename',$data['tablename'])->count()){ return error('模型已经存在!'); exit(); } ~~~ ## 3、判断新模型数据表是否存在(数据库中是否有新的模型数据表) ~~~ $tables = $models->list_tables(); if(in_array(config('database.prefix').$data['tablename'],$tables)){ return error('模型数据表已经存在!'); exit(); } ~~~ #### 自定义函数list_tables() //models模型方法 ~~~ //返回数组格式的全部表名 public function list_tables(){ $tables = array(); $data = Db::query('SHOW TABLES'); foreach ($data as $value) { $tables[] = $value['Tables_in_'.config('database.database')]; } return $tables; } ~~~ ## 4、添加模型信息(功能比较复杂:完成前三步) ### // 第1步:新增models数据表记录 ~~~ if($this->allowField(true)->save($data)){ return true; }else{ return false; } ~~~ ### // 第2步:在models_field数据表中添加公共字段信息 ~~~ const newModelSql = './data/sfox_newmodel.sql'; $dbPrefix = config('database.prefix');//获取表前缀 //读取新模型公共字段的SQL文件 $newModelSql = file_get_contents(self::newModelSql); //表前缀的替换 $sqlSplit = str_replace(array('@cmsprefix@','@modelid@','@cmstablename@'),array($dbPrefix,$this->id,$data['tablename']),$newModelSql); //批量执行sql $sqlSplitArray = explode('--',$sqlSplit); foreach ($sqlSplitArray as $value) { Db::execute($value); } return true; ~~~ # 模型的相关代码(片段) ## 【获取模板信息】 > 位置:项目根目下新建文件夹(template\default\temp) 模板:三个模板文件(category.html;list.html;content.html) 获取:控制器中读取显示模板文件(代码如下) ~~~ $handler = opendir('../template/default/temp'); while( $file = readdir($handler)){ if($file != '.' && $file != '..'){ $files[]['name'] = $file; } } $this->assign('filename',$files); ~~~ ## 【插入数据调整信息:修改器】 ~~~ protected $insert = ['addtime']; //addtime修改器 protected function setAddtimeAttr($value){ return date('Y-m-d H:i:s'); } ~~~ ## 【读取磁盘文件】 ~~~ const newModelSql = './data/sfox_newmodel.sql'; $newModelSql = file_get_contents(self::newModelSql); ~~~ ## 【获取模板文件名】 ~~~ $handle = opendir('../template/default/temp/'); while ($file = readdir($handle)) { if ($file != '.' && $file != '..') { $files[]['name'] = $file; } } ~~~