实例
<?php namespace app\index\controller; use think\Controller; use app\index\model\Staff as StaffModel;//设置别名以免冲突 class Staff extends Controller { //实例化模型 public function instance(StaffModel $staff) { // $staff = new StaffModel; //模型实例化 dump($staff->getName()); //查看模型名称 //新增一条记录 $staff->name = '抖音小王子'; $staff->sex = 1; $staff->age = 25; $staff->phone_number = 12598875435; //新增操作 $staff->save(); return '成功添加一条记录,id='.$staff->id; //实际开发中,基本上都是用静态方法完成模型操作 } //模型查询 public function query() { //1.单条记录:get(主键、闭包) //闭包:就是一个匿名回调函数,将函数作为参数进行传递 // // //new StaffModel // $staff = StaffModel::get(2);//模型返回值是对象 // dump($staff);//array // echo "<hr>"; // var_dump($staff);//object // echo '<hr>'; // echo $staff['name']; // echo '<br>'; // echo $staff->name; // echo '<hr>'; // //用闭包来创建查询条件 // $staff = StaffModel::get(function($query){ // $query->where('id','>',10)->where('age','>',50); // }); // echo 'ID大于10,年龄大于50的员工信息'; // dump($staff); // echo '<hr>'; // //直接静态调用Db类的查询构造器进行查询 // // StaffModel == Db::table('staff'); // $staff = StaffModel::where('id','>',10) // ->where('age','>',50) // ->find(); // dump($staff); //2.查询多条记录,all(主键列表/闭包) //返回值是多个数组/对象数组 // $staffs = StaffModel::all(); //不传参数,查询的是所有数据 // $staffs = StaffModel::all([1,2,3]);// 查询的是主键为1.2.3的数据 SELECT * FROM `staff` WHERE `id` IN (1,2,3) // // 闭包方式传入查询条件 $staffs = StaffModel::all(function($query){ $query->where('sex','=',0)->where('age','>',40)->field(['name','age','sex']); }); // var_dump($staffs); foreach ($staffs as $staff) { echo '姓名:'.$staff->name.'<br>'; echo '年龄:'.$staff->age.'<br>'; echo '性别:'.$staff->sex.'<hr>'; } echo '<br>'; //采用闭包来实现将请求变量注入到闭包条件中 也就是把条件的值用一个变量来替代 , //可在URL中传值实现动态查询 //$this->request : 请求对象 $sex = $this->request->param('sex') ?: 1; $age = $this->request->param('age') ?: 40; $staffs = StaffModel::all(function($query) use($sex,$age) { $query->where('sex','=',$sex)->where('age','>',$age)->field(['name','age','sex']); }); dump($staffs); } public function update() { //基于查询的,不允许无条件更新 //先是查询再更新 // $staff = StaffModel::get(4); // $staff->name = '王麻子'; // $staff->save(); // // // // 静态方法:update(数据,条件,字段)、、一般只用到前两个参数,数据就是需要改成的目标 // StaffModel::update( // ['name'=>'李刚'], // ['id'=>8] // ); // // // 复杂更新 // 将id大于20的员工年龄加上5岁 // StaffModel::update( // ['age'=>\think\Db::raw('age+5')], // function($query){ // $query->where('id','>',20); // } // ); //也可以用查询构造器来更新数据 // StaffModel::where('id','>=',20)->data('age',\think\Db::raw('age+1'))->update(); StaffModel::where('id','>=',20)->data(['age'=>\think\Db::raw('age+5')])->update(); } //创建模型:添加数据 public function create() { //save() //create(数据,字段) 允许添加的字段 静态方法 $data = [ 'name'=>'孙悟空', 'sex'=>0, 'age'=>100, 'phone_number'=>125487824 ]; // $field =['name','sex','age','phone_number']; // $field =['name','sex','age']; // StaffModel::create($data,$field); // // // 查询构造器添加数据 StaffModel::insert($data); } //模型删除:删除记录 public function delete() { //静态方法 destroy(主键,主键列表,闭包) // StaffModel::destroy(28); // StaffModel::destroy([1,2,3]); // SELECT * FROM `staff` WHERE `id` = 28 // DELETE FROM `staff` WHERE `id` = 28 先查询ID=28的这条记录再删除 // // 删除条件推荐使用闭包 StaffModel::destroy(function($query){ $query->where('age','>',50)->where('id','>',23); }); //查询构造器实现删除 StaffModel::where('age','>',50) ->where('id','>',23) ->delete(); } //软删除:必须在模型中进行配置 也就是更新模拟删除,增加了一个字段delete_times时间戳 public function softDelete() { // StaffModel::destroy(1); //软删除的数据在普通查询中不可见 // $res = StaffModel::all(); // dump($res); // //如果想在查询的时候看到已经被删除的记录 // $res = StaffModel::withTrashed()->select(); //$res = StaffModel::withTrashed()->select(); //只看回收站: $res = StaffModel::onlyTrashed()->select(); dump($res); } public function restore(StaffModel $staff) { //恢复软删除的数据 $res = $staff->restore(['id'=>1]); echo $res ? '恢复成功' : '失败'; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例