<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/15 * Time: 19:31 */ //控制器名称和模型及数据库同名称 namespace app\index\controller; use think\Controller; //引入控制器 use app\index\model\Staff as StaffModel; use think\model\concern\SoftDelete; //导入模型,发现模型和控制器名称重名,别名处理:Staff as StaffModel class Staff extends Controller { //实例化模型 public function instance(StaffModel $staff) //依赖注入 { // $staff = new StaffModel(); //模型实例化 dump($staff->getName()); //查看模型名称 //新增一条记录 $staff ->name = '学习'; $staff ->sex = 0; $staff -> age =36; $staff ->salary = 5000; //新增操作 $staff -> save(); return '新增成功,id='.$staff->staff_id; //实际开发中,都是用静态方法完成模型操作的 } //模型查询 public function query() { //1.单条记录:get(主键/闭包) //闭包就是匿名回调函数,将函数作为参数进行传递 //通过查询来创建模型 $staff = StaffModel::get(2); dump($staff); //系统预处理查看数组 echo '<hr>'; \var_dump($staff); //调用系统函数查看显示对象 echo '<hr>'; echo $staff['name'],'<br>'; //用数组的方式获取值 echo $staff->name,'<br>'; //用对象的方式获取值 //用闭包来查询条件 $staff = StaffModel::get(function ($query){ $query->where('sex',0)->where('salary','>','7000'); }); echo '性别为男,工资大于8000的数据:'; dump($staff); echo '<hr>'; //直接静态调用Db类的查询构造器进行查询 // StaffModel == Db::table('staff') StaffModel::where('sex',0) ->where('salary','>',8000) ->find(); dump($staff); echo '<hr>'; //2.多条记录的查询:all(主键列表/闭包) //返回值是多维数组/对象数组 // $staff = StaffModel::all(); //查询到所有数据: SELECT * FROM `staff` // $staff = StaffModel::all([1,2,3]); //获取到的是主键等于1,2,3的3条数据: SELECT * FROM `staff` WHERE `staff_id` IN (1,2,3) // $staffs = StaffModel::all(function ($query) // { // $query->where('age','<',40) // ->where('salary','<',6000); // }); // SELECT * FROM `staff` WHERE `age` < 40 AND `salary` < 6000 // dump($staffs); //用foreach遍历 // foreach ($staffs as $staff) // { // echo '姓名:'.$staff->name.'<br>'; // echo '性别:'.$staff->sex.'<br>'; // echo '年龄:'.$staff->age.'<br>'; // echo '工资:'.$staff->salary.'<hr>'; // } //采用闭包将变量注入到闭包条件中 // $this->request === new \think\facade\Request; //请求对象 $age = $this->request->param('age') ? : 40; $salary = $this->request->param('salary') ? : 5000; $staffs = StaffModel::all(function ($query) use ($age,$salary) { $query->where('age','<',$age) ->where('salary','<',$salary); }); //用foreach遍历 // foreach ($staffs as $staff) // { // echo '姓名:'.$staff->name.'<br>'; // echo '性别:'.$staff->sex.'<br>'; // echo '年龄:'.$staff->age.'<br>'; // echo '工资:'.$staff->salary.'<hr>'; // } dump($staffs); } //模型更新 public function update(){ //基于前置条件查询的,不允许无条件更新 // $staff =StaffModel::get(3); //条件查询出数据 // $staff ->name = '无忌哥哥'; //更新字段内容 // $staff ->save(); //私有方法,将数据写回到数据库 //建议用静态方法:update(数据,条件,字段) StaffModel::update( ['name'=>'张无忌'], ['staff_id'=>3] ); //复杂更新 //将年龄大于50的都加500 // StaffModel::update( // ['salary'=>\think\Db::raw('salary+500')], // function ($query){ // $query->where('age','>=',50); // } // ); //也可以使用查询构造器来更新数据 StaffModel::where('age','>',50) ->data(['salary'=>\think\Db::raw('salary+500')]) ->update(); } //创建模型:添加数据 public function create() { //1.save() //2.create(数据,字段) $data =[ 'name'=>'孙唐22', 'sex'=>0, 'age'=>999, 'salary'=>8888 ]; // $field = ['name','sex','age','salary']; // $field = ['name','sex']; // StaffModel::create($data,$field); //不允许添加的数据会调用默认值 //3.用查询构造器来插入数据 StaffModel::insert($data); } //模型删除:删除记录 public function delete() { //destroy(主键/主键列表/闭包) // StaffModel::destroy(32); //先查询再删除2条sql语句 // StaffModel::destroy([1,5,6]); //先查询再删除2条sql语句 //删除条件推荐使用闭包 StaffModel::destroy(function ($query){ $query->where('age','>',55) ->where('salary','>=',5000); }); //执行结果: SELECT * FROM `staff` WHERE `age` > 55 AND `salary` >= 5000 //查询构造器实现删除 StaffModel::where('age','>',50) ->delete(); //DELETE FROM `staff` WHERE `age` > 50 } //软删除:必须在模型中进行配置,用更新模拟删除 public function softDelete() { // StaffModel::destroy(29); //软删除在普通查询中不可见 // $res =StaffModel::where('staff_id < 5')->select(); //查看含有被软删除的记录 // $res =StaffModel::withTrashed()->where('staff_id < 5')->select(); //查看已被软删除的记录 $res =StaffModel::onlyTrashed()->select(); dump($res); } //软删除的记录的恢复 public function softRestore(){ $res = StaffModel::onlyTrashed()->find(29); $res->restore(); //执行结果SQL:UPDATE `staff` SET `delete_time` = 0 WHERE ( `staff_id` = 28 ) AND `delete_time` <> 0 } }
数据库查询操作是基础,更新和删除必须要有前置查询条件,删除操作一般都用软删除来更新到回收站,在回收站再用物理删除彻底删除。