thinkphp5.0之封装万能的增删改查方法

PHP 1267浏览 评论

| 在开发的过程中提高代码的可读性、把代码写得优雅、提高开发效率是每一个程序员的追求!

在我们平时做项目开的时候,每一个模块下都会有增删改查操作,我们会在每一个控制器下写增删改查方法,增删改查会让人写到吐,而且代码很多都差不多,重要的是开发效率极为的低下,并且你有你的一套写法,他有他的一套写法写作起来谁看谁都不顺眼,每次看别人写的代码心里就会嘀咕一句,这是哪个sb写的代码,写一坨屎有木有!

如果我封装一个方法让大家都使用它,格式就会统一了

如果有一个万能的增删改查方法,那么就可以节省我大量的代码,并且极大的提高我们项目开发效率。


1、额,下来我们把代码贴上来(我直接写在公用函数文件common.php里面):

/**
 * @param $table_name 表名
 * @param int $is_primary 是否需要返回主键
 * @param int $is_introduction 是否需要生成简介
 * @param int $is_create_time  是否需要创建时间
 * @return bool|mixed
 * @throws Exception
 * 单表万能插入的方法
 */
function universalAdd($table_name,$is_create_time = 0,$is_primary = 0,$is_introduction = 0){
    //这个我已经在thinkphp5.0之目录结构设计经验总结中写了模型封装类,这里就直接实例化了
    $model = new \app\data\Data($table_name);   //实例化模型
    $post = \think\Request::instance()->post(); //接受表单数据
    if(!empty($_FILES)){
        $post['image'] = upload(); //如果有图片则上传图片
    }
    //是否生成简介内容
    if($is_introduction == 1){
        $post['introduction'] = \think\Helper::articleStripTags($post['content']);
    }
    //是否生成创建时间
    if($is_create_time == 1){
        $post['create_time'] = time();
    }
    //是否需要返回主键ID
    if($is_primary == 1){
        $add = $model->insertData($post);
        $result = $add;
    }else{
        $add = $model->_insert($post);
        $result = true;
    }
    //抛出异常
    if(!$add){
        throw new \LogicException('操作错误',10020);
    }
    return $result;
}

/**
 * @param $table_name
 * @param int $is_primary
 * @param int $update_time
 * @param int $is_introduction
 * @param array $where
 * @return bool
 * @throws Exception
 * 单表万能修改方法
 */

function universalSave($table_name,$is_primary = 0,$update_time = 0,$is_introduction = 0,$where = []){
    $model = new \app\data\Data($table_name); //实例化模型
    $post = \think\Request::instance()->post(); //接受表单数据
    if(!empty($_FILES)){
        $post['image'] = upload(); //如果有图片则上传图片
    }else{
        unset($post['image']);
    }
    //是否重新生成简介
    if($is_introduction == 1){
        $post['introduction'] = \think\Helper::articleStripTags($post['content']);
    }
    //是否创建更新时间
    if($update_time == 1){
        $post['update_time'] = time();
    }
    //是否存在主键,有主键则直接更新
    if($is_primary == 0){
        $save = $model->updateData($post);
    }else{
        $save = $model->updateData($post,$where);
    }
    if($save === false){
       throw new \LogicException('操作错误',10020);
    }
    return true;
}

/**
 * @param $table_name
 * @param array $where
 * @return array|false|mixed|PDOStatement|string|\think\Model
 * 单表万能查询一条数据
 */
function universalFind($table_name,$where = []){
    $model = new \app\data\Data($table_name); //实例化模型
    return $model->find($where);
}

2、控制器代码调用万能增加与修改的方法:

public function land(){
    try{
    $id = intval(input('param.id')); //接受修改的ID 编号
    $one = universalFind('land',['id'=>$id]); //查询一条数据,修改需要用到它
    //如果是post提交
        if(request()->isPost()){
            if(empty(input('param.id'))){
            //调用万能插入方法,land 是需要操作的数据表
                if(universalAdd('land',1,0,0)){
                    return self::formatSuccessResult();
                }
            }else{
            //如果有id则调用万能修改方法
                if(universalSave('land')){
                    return self::formatSuccessResult();
                }
            }
        }
    }catch(\Exception $e){
        return self::formatResult($e->getCode(),$e->getMessage());
    }
    return view('land',[
        'one' => $one
    ]);
}

总结:不知道大家有没有发现,这样的话代码变得极为的精简,可读性也是相当的高,添加及修改只需要短短的几行代码就搞定了,并且在其他的地方我们也可以调用,让我们的代码也变得极为的规范,这无疑会大大的提高我们的开发效率!

缺点:这方法只适用于单表的插入和修改,如果是多表操作还需要特殊处理!希望能够帮助到大家!也希望大家多多提意见!

本文连接:http://www.phpbloger.com/article/26 文章都为原创,转载请注明出处!

相关文章