TP5根据表字段删库

每当项目上线前,都要测试一番,产品经理自己瞎操作一波后会来找后台,给我把有关XXX的数据都删除了(我这项目是供应商),然后你就去操作数据库,把有关的数据删除!!有一天你觉得烦了,是时候弄个一键删除了,掉个接口给他,让产品经理别来找你,自己删了自己再测!!

代码思路如下:

用的时候把参数$phone设置为条件值,where()也要改为对应字段作为条件,$table_model设置为对应的字段名!!

//删除供应商所有数据
    public function delCompanyAll($phone)
    {
        $company = CompanyModel::getInstance()->where(['phone'=>$phone])->find();
        $table = BaseModel::getInstance()->query('show tables');//获取数据库所有表
        foreach ($table as $key=>$value){
            //$value['Tables_in_xyb123']长这个样子:xyb_check_stock
            $table_name = explode("_",$value['Tables_in_xyb123']);//切割表名为数组
            $model = '';
            for($i = 1;$i < count($table_name); $i++){//$i=1从1开始,去除表前缀
                $model .= ucfirst($table_name[$i]);//去除前缀的表名
            }
            //拼接模型的命名空间(注:不能直接用字符串实例模型)
            $table_model = "\\app\\common\\model\\".$model.'Model';
            //实例并查询(这里也可以用获取表字段结构的方式,但个人感觉查询更方便)
            $table_data = (new $table_model)->getInstance()->find();
            if(isset($table_data['company_id'])){//如果表存在"company_id"字段
                (new $table_model)->getInstance()->where(['company_id'=>$company['id']])
                ->delete();//删除
            }
            if($model == "Company"){
                (new $table_model)->getInstance()->where(['id'=>$company['id']])
                ->delete();//删除自己
            }
        }
        $this->displayBySuccess();//结束
    }

猜你喜欢

转载自blog.csdn.net/qq_41912505/article/details/88559314