ThinkPHP3.2数据库操作总结

    xiaoxiao2022-07-12  156

    本文只是总结一些常用的方法,更多方法请参考官方文档,下面进入正题

    首先,实例化一个对象,本文以下都使用此对象$model

    $model = M("表名"); //或 $model = D("表名或模型名");//使用模型名时,必须生成一个模型文件

    M 是系统模型,D 是自定义模型。

    M函数比较适合增删改查操作,D函数适合增删改查和一些其他操作。由于M不需要加载具体的模型类,因此M函数的效率会比D高一些,推荐使用M。


    一、增加

    1、添加一条数据:

    返回插入的主键值,失败返回false

    $model->add($data); $model->data($data)->add(); //3.2.3版本开始,可以支持不执行SQL而只是返回SQL语句 $sql = $model->fetchSql(true)->add($data); echo $sql;

    2、添加多条数据:

    成功:如果主键是自动增长型,返回值为新增记录Id最大值,否则返回true 失败:返回 false

    //该功能需要3.2.3以上版本,3.2.3以下版本仅对mysql数据库支持 $model->addAll($dataList)

    二、删除:

    返回值是删除的记录数SQL出错返回false0表示没有删除任何数据

    //删除一条数据 $model->delete("5"); //删除主键为5的数据 //删除多条数据 $model->where('id=5')->delete(); // 删除id为5的用户数据 $model->delete('1,2,5'); // 删除主键为1,2和5的用户数据 $model->where('status=0')->delete(); // 删除所有状态为0的用户数据 //也可以用order和limit方法来限制要删除的个数 $model->where('status=0')->order('create_time')->limit('5')->delete(); // 删除所有状态为0的5 个用户数据 按照创建时间排序 //为了避免错删数据,如果没有传入任何条件进行删除操作的话,不会执行删除操作 $model->delete(); //删除所有的记录,可使用下面的方式 $model->where('1')->delete();

    三、修改:

    返回值是影响的记录数更新出错返回false

    $model->where()->save($data); //如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录 $model->save($data) //更新一个字段 $model-> where('id=5')->setField('name','ThinkPHP');// 更改用户id为5的name值 //更新多个字段 $data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com'); $model-> where('id=5')->setField(data );// 更改用户id为5的name和email的值 //对于统计字段(通常指的是数字类型)的更新 $model->where('id=5')->setInc('score',3); // 用户的积分加3 $model->where('id=5')->setInc('score'); // 用户的积分加1 $model->where('id=5')->setDec('score',5); // 用户的积分减5 $model->where('id=5')->setDec('score'); // 用户的积分减1 //延迟更新 $model->where('id=5')->setInc('view',1); // 文章阅读数加1 $model->where('id=5')->setInc('view',1,60); // 文章阅读数加1,并且延迟60秒更新(写入)

    四、查询

    1、查询一条数据:

    返回一个关联数组空返回NULL出错返回false

    $result = $model->where()->find(); $model->field("字段,字段...")->find(); $model->field()->where()->find();

    2、查询多条数据:

    返回二维数组空返回NULL出错返回false

    $model->where()->select(); $model->field("字段...")->select(); $model->where()->select(); $model->order()->select(); $model->limit()->select(); $model->field()->where()->order()->limit()->select();

    五、原生SQL

    1、查询

    返回结果数据集(同select方法)错误返回false

    $model->query($sql);

    2、增删改

    返回影响的记录数错误返回false

    $model->execute($sql);

    六、聚合查询

    $model->where()->count(); $model->where()->max(); $model->where()->min(); $model->where()->avg(); $model->where()->sum();

    七、多表查询

    $model->join("表2 on 关联的字段相等")->find(); $model->join("表2 on 关联的字段相等")->select();

    八、分页

    use Think\Page;//导入分页类 $page = new Page(总记录数,每页显示的记录数);//实例化分页类 $page->firstRow;//每页记录起始值 $page->listRows;//每页显示的记录数 $page->show();//分页显示输出

    官方提供的实例:

    $User = M('User'); // 实例化User对象 $count = $User->where('status=1')->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25) $show = $Page->show();// 分页显示输出 // 进行分页数据查询 注意limit方法的参数要使用Page类的属性 $list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select(); $this->assign('list',$list);// 赋值数据集 $this->assign('page',$show);// 赋值分页输出 $this->display(); // 输出模板

    九、事务处理

    $model->startTrans();//开启事务 $model->commit();//提交 $model->rollback();//回滚

     

    最新回复(0)