返回数据库的增删改......登陆

数据库的增删改查操作练习

为梦兼程2019-04-17 22:15:55342
<?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

    }
    
}

    数据库查询操作是基础,更新和删除必须要有前置查询条件,删除操作一般都用软删除来更新到回收站,在回收站再用物理删除彻底删除。

最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送