控制器类查询构造器和原生查询总结

Original 2018-12-15 21:39:13 254
abstract:一.数据库配置:    静态配置:在和应用目录同级的config/database.php中进行配置    动态配置:使用connect()进行配置二.原生查询     代码中直接写原生sql语句 叫做原生查询    需要引用th

一.数据库配置:

    静态配置:在和应用目录同级的config/database.php中进行配置

    动态配置:使用connect()进行配置

二.原生查询

     代码中直接写原生sql语句 叫做原生查询

    需要引用think\Db类  use think\Db;

    查询:不仅仅是读,还包括写操作,CURD :增删改查

    execute()专用做写操作:新增,更新,删除   可以使用占位符来对sql语句进行赋值   :占位符   通用占位符为?不推荐使用   

    query()用作读操作,也就是查询操作   可以使用占位符来对sql语句进行赋值   :占位符   通用占位符为?不推荐使用   

    如下

  public function select()
    {
        //查询staff表,salary大于5000的员工信息
        $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`>5000 LIMIT 5";
        //用通用占位符"?",防止sql注入攻击
        $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`>? LIMIT ?";
        //用命名占位符":"
        $sql = "SELECT `name`,`salary` FROM `staff` WHERE `salary`> :salary LIMIT :limit";
        //通用占位符 ,顺序不可改变
//        $res = Db::query($sql,[5000,5]);
        //命名占位符,顺序可以改变,
//        $res = Db::query($sql,['salary'=>5000,'limit'=>5]);
        //使用占位符,传入INT类型,需要限定下格式 \PDO::PARAM_格式  
        $res = Db::query($sql,['salary'=>[5000,\PDO::PARAM_INT],'limit'=>[5,\PDO::PARAM_INT]]);

        dump($res);
    }
     
     //更新操作
     public function update()
{
    //将id=10的员工,工资修改为7000
    $sql = "UPDATE `staff` SET `salary`=:salary WHERE `staff_id` = :staff_id";
    //依旧是整数类型 ,限定下类型,否则传入字符串类型
    Db::execute($sql,['salary'=>[7000,\PDO::PARAM_INT],'staff_id'=>[10,\PDO::PARAM_INT]]);

    //如果更新失败,会自动终止运行并抛出异常
    return '更新成功';
}

三.查询构造器

    1.查询操作   返回一个二位数组 没有匹配的记录则返回一个空数组   【尽量不在终极方法中传参数】

        * find():查询单条记录   select()查询多条记录     table('数据表') 设置查询的数据表    field('字段1,字段2,...')或者数组格式传入field(['字段1','字段2'...]) 返回指定的字段  新版本数组格式不再支持中文别名       where()查询条件  具体操作如下

    public function find()
    {
        //查询单条记录
        $res = Db::table('staff')
//            ->field('name,sex,salary')
//            ->field(['name','sex','salary'])   //新版本数组格式不再支持中文别名
            ->field('name as 姓名,sex as 性别,salary as 工资')   //字符串可以别名中文
            ->where('staff_id','>',10)  //'='可以省略    主键大于10的第一条
            ->find();
        dump($res);
    }
    
        public function select()
    {
        //查询满足条件的多条记录
        $res = Db::table('staff')
            ->field('name as 姓名,sex as 性别,salary as 工资')
//            ->where('salary > 3000')
            ->where('salary', '>' ,'3000')
//            ->order('salary DESC')      //DESC降序   默认ASC 升序
            ->order('salary','ASC')      //DESC降序   默认ASC 升序
            ->limit(5)        //只输出5条
            ->select();
        dump($res);
    }

    2.新增方法  写操作返回受影响的记录条数   insert()   新增一条数据   insertAll() 新增多条记录        data() 将数据打包  方法如下   Db::getLastInsID()  返回新增的最后一个主键     insertGetId()  新增并返回主键   操作如下

  public function insert()
    {

        //新增单条记录 insert()
        $data = [
            'name' => '美国队长',
            'sex'  => 0,
            'age'  => 98,
            'salary' => 6000
        ];
        $data1 = [
            'name' => '蚁人',
            'sex'  => 0,
            'age'  => 98,
            'salary' => 6000
        ];
//        $num = Db::table('staff')
//            ->insert($data);
//        $id = Db::getLastInsID();   //返回最后新增的主键id
//        return $num ? '添加成功id='.$id : '没有记录被添加添加失败';

        //data($data)  :将要处理的数据打包  option[]
        //insertGetId()  == insert()+getLastInsID()
//
//        $id = Db::table('staff')->insertGetId($data1);
//        return $id ? '添加成功id='.$id : '没有记录被添加添加失败';

//        $num = Db::table('staff')
//            ->data($data)    //打包数据
//            ->insert();
//        $id = Db::getLastInsID();   //返回最后新增的主键id
//        return $num ? '添加成功id='.$id : '没有记录被添加添加失败';

        //新增多条记录:insertAll()
        $data = [
            ['name'=>'钢铁侠','sex'=>0,'salary'=>7000],
            ['name'=>'班纳','sex'=>0,'salary'=>500],
            ['name'=>'鹰眼','sex'=>0,'salary'=>5000],
        ];
        $num = Db::table('staff')
            ->data($data)        //打包数据
            ->insertAll();
        return $num ? '添加成功'.$num.'条记录' : '没有记录被添加添加失败';

    }

    3.更新操作  update()  更新操作必须是基于前置查询,不允许无条件更新  如果更新条件有主键 可以直接传入data()中  Db::raw()可以实现自增操作等 操作如下  

    public function update()
    {

        //将工资小于等于5000的员工,加薪1000
//        $num = Db::table('staff')
//            ->where('salary','<=',4000)
//            ->data(['salary'=>Db::raw('salary+1000')])        
//            ->update();

        $num = Db::table('staff')
            ->update(['sex'=>1,'staff_id'=>45]);    
        return $num ? '更新成功'.$num.'条记录' : '没有记录被添加添加失败';

    }

    4.删除操作 delete()  删除也是必须基于前置查询,不允许无条件删除 

        * 删除数据是一个及其危险的操作,建议使用框架软删除来实现,用更新来模拟删除

        * 在实际的开发过程中,尽可能不要在控制器直接操作数据库,而是采用模型来实现

    public function delete()
    {

//        $num = Db::table('staff')->delete(18);    //删除
//        $num = Db::table('staff')->delete([12,13,17]);
        $num = Db::table('staff')
//            ->where('staff_id','15')
            ->where('salary','>',10000)
            ->delete();
        $num = Db::table('staff')->delete(true);    //清空表
        return $num ? '删除成功'.$num.'条记录' : '没有记录被添加添加失败';

    }







Correcting teacher:韦小宝Correction time:2018-12-14 16:03:56
Teacher's summary:看到你的作业就是知道肯定很不错!一如既往写的很棒!继续加油吧!

Release Notes

Popular Entries