每当项目上线前,都要测试一番,产品经理自己瞎操作一波后会来找后台,给我把有关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();//结束
}