企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 【字段删除·思路分析】 > 涉及两个数据表(models_field和test) 1、删除models_field表中记录 2、删除副表中相应字段 重难点:通用的函数table_exists 模型主要负责数据处理,返回整型值 控制器主要负责业务员逻辑判断,通常用switch……case……default判断 ## 【SQL修改某字段值】 ~~~ UPDATE tp_models_field SET issystem = 0 WHERE modelid=31; ~~~ ## 【整合公共函数·显示所有数据表】 > 整合前代码: ~~~ public function list_tables(){ $tables = array(); $data = Db::query('SHOW TABLES'); foreach ($data as $value) { $tables[] = $value['Tables_in_' . config('database.database')]; } return $tables; } ~~~ > 整合后代码:【整合公共函数·显示所有数据表】 ~~~ 公共函数代码:application应用目录下面common.php /** * [table_exists 检测数据表是否存在] * @param string $tablename [表名,不含前缀] * @return [bool] [存在返回true,不存在返回false] */ function table_exists($tablename='') { //获取所有数据表名 $tables = []; $data = Db::query('SHOW TABLES'); foreach ($data as $value) { $tables[] = $value['Tables_in_'.config('database.database')]; } //获取表前缀 $dbPrefix = config('database.prefix'); //当前的表名 $tablename=$dbPrefix.$tablename; if(in_array($tablename,$tables)){ return true; //存在 }else { return false; //不存在 } } ~~~ ## 【完整代码】 > 控制器代码: ~~~ /** * [delete 删除字段] * @param integer $id [字段ID] * @return [type] [提示信息] */ public function delete($id=0, $modelid=0){ if(0 == $id){ return error('该字段不存在'); } //实例化字段模型 $modelsfield = new ModelsFieldModel; $resultId = $modelsfield->deleteField($id);//返回状态码 switch ($resultId) { case -1: return error('该字段不存在!'); break; case -2: return error('数据表不存在!'); break; case -3: return error('该字段不允许被删除!'); break; default: return success('字段删除成功',url('index',array('id'=>$modelid,'tab'=>1))); break; } } ~~~ > 模型代码: ~~~ /** * [deleteField 删除字段,需删除models_field表中记录以及副表相应字段] * @param [int] $fieldid [字段ID] * @return [int] [状态码] */ public function deleteField($fieldid){ $info = Db::name('models_field')->where('id',$fieldid)->find(); if(empty($info)){ return -1; //该字段不存在 exit; } //判断副表是否存在 $modelid = $info['modelid']; $modelname = Db::name('models')->where('id',$modelid)->value('tablename'); if(!table_exists($modelname)){ return -2; //副表不存在 exit; } //判断是否允许删除 if(1 == $info['issystem']){ return -3; //该字段不允许被删除 exit; }else{ //删除models_field表中记录 Db::name('models_field')->where('id',$fieldid)->delete(); //删除副表中相应字段 $dbPrefix = config('database.prefix'); Db::execute("ALTER TABLE `{$dbPrefix}{$modelname}` DROP COLUMN `{$info['field']}` ;"); } } ~~~ > 【sublime text安装自动补全注释的插件】 https://blog.csdn.net/baidu_38300480/article/details/79379795 https://www.cnblogs.com/qingkong/p/5039527.html https://www.cnblogs.com/feifei-cyj/p/7718793.html 1、重启sublime text 3,快捷键Ctrl + Shift + P ,在输入框中出入pack..找到Install Package。 2、点击Install Package,在输入框中,安装DocBlockr插件。 3、安装成功之后,Preferences->Package Settings->DocBlockr->Settings-User,在文件中添加以下代码并保存: { "jsdocs_extra_tags":["@author lucky","@DateTime {{datetime}}"] }