多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 【删除模型·思路分析】 > 1、数据表中有数据不能删除 2、分类关联模型,也不能删除 3、执行删除操作(分三步,与添加模型步骤一样) 首先,删除模型表models中记录 其次,删除models_field当前模型字段 第三,删除独立字段表 ## 【代码实现】 > 删除模型(控制器) ~~~ public function delete($id=0,$tablename=''){ //$id为当前模型ID,$tablename为模型名 //1.判断独立数据表是否有数据 $count = Db::name($tablename)->count(); if($count){ //独立数据表有数据,无法删除 return error('该模型下含有相关内容,无法删除!'); }else{ //2.无数据则判断分类表是否关联当前模型,有关联则取消关联 $count = Db::name('category')->where('modelid',$id)->count(); if($count){ Db::name('category')->where('modelid',$id)->setField('modelid',0); } //最后删除该模型 if($this->deleteModel($id,$tablename)){ return success('模型删除成功!',url('index',['tab'=>1])); }else{ return error('模型删除失败!'); } } } ~~~ > 删除模型业务逻辑(控制器) ~~~ protected function deleteModel($id=0,$tablename=''){ //1.删除模型表models中记录 Db::name('models')->where('id',$id)->delete(); //2.删除models_field当前模型字段 Db::name('models_field')->where('modelid',$id)->delete(); //3.删除独立字段表 $models = new ModelsModel; if($models->deleteTable($tablename)){ return true; }else{ return false; } } ~~~ > 删除独立数据表(模型) ~~~ public function deleteTable($tablename){ //获取下数据表前缀 $dbPrefix = config('database.prefix'); Db::execute("DROP TABLE `{$dbPrefix}{$tablename}`;"); return true; } ~~~ ## 【无刷新跳转】 ~~~ $("a[name='delete']").click(function(){ //获取数据 var url = $(this).attr('href'); //异步提交 $.ajax({ type: "POST", dataType:"json", url:url, data:null, success:function(obj){ var icon_num = (obj.status==200) ? 1 : 2; if(obj.status==200 || obj.status==202){ layer.open({ content: obj.msg, btn: ['确定'], shade: 0.1, icon: icon_num, yes: function(index, layero){ if(obj.url){ location.href = obj.url; //跳转指定地址 }else{ layer.close(index); } }, cancel: function(){ location.href = obj.url; //跳转指定地址 }, }); } }, error:function(data){ layer.alert('网络故障!'); } }); return false; }); ~~~