博客列表 >数据库原生查询与查询构造器--5.23作业

数据库原生查询与查询构造器--5.23作业

弓长木子的博客
弓长木子的博客原创
2018年05月24日 12:09:13676浏览

10个常用的查询构造器

关键点:所有的读操作,返回的都是一个二维数组,在使用的时候需要foreach遍历,失败则返回空数组;写操作返回受到影响的条目数,失败返回0;不推荐在最终查询命令中传参,最好将各种查询条件在查询构造器中分解,最终查询命令只进行查询不分担条件

实例
<?php
namespace app\index\controller;
use think\Db;

class query{
        
        public function find(){
            //1.table()  指定要查询的表名,name()可以达成同样目的且可以自动过滤表名前缀,但在database.php配置中表前缀prefix设置为空,因此只用table()就可以达到要求
            //2.find()  查询满足条件的数据,但只返回第一条
            $res = Db::table('staff')->find(4);//如果以主键为查询条件,可以直接在find中传参
            dump($res);

            //3.查询条件可以在where命令中填写,避免在最后的find命令中传参
            //where(字段名,表达式,查询条件)是where的基本结构,其中表达式如果是相等,则可以省略
            $res = Db::table('staff')
            ->where('staff_id','=','4')
            ->find();
            dump($res);

            //4.查询指定的字段使用field(),field参数可以是字符串,也可以是数组,使用数组的好处是可以另行指定字段的别名便于区分,相当于SQL语句中的as
            $res = Db::table('staff')
            //->field('name,sex,salary')//字符串
            //->field(['name','sex','salary'])//索引数组
            ->field(['name'=>'姓名','sex'=>'性别','salary'=>'工资'])//关联数组
            ->where('staff_id','4')
            ->find();
            dump($res);
        }

        public function select(){

            //5.查询满足条件的多条记录用select()
            //6.order实现排序,desc降序,asc升序
            //7.limit限制显示的条数
            $res = Db::table('staff')
            ->field(['name'=>'姓名','salary'=>'工资'])
            ->where('salary','>','3000')
            ->order('salary','desc')
            ->limit(3)
            ->select();
            dump($res);
 
        }

        public function insert(){

            //8.插入一条数据insert()
            $data = [
			    'name' => '胡二刀',
			    'sex' => 0,
			    'age' => 49,
			    'salary' => 5300
		    ];
	    $num = Db::table('staff')->insert($data);
            //insert插入成功后直接获取id的getLastInsID二合一操作命令insertgetId替换insert
	    //$num = Db::table('staff')->insertgetId($data);
	    //返回上一条执行成功语句的id
	    $id = Db::getLastInsID();
	    return $id?'插入成功,id='.$id :'插入失败';


	    //插入多条数据insertAll
	    $data = [
			['name' => '张飞','sex' => 0,'age' => 48,'salary' => 6900],
    			['name' => '刘备','sex' => 0,'age' => 58,'salary' => 4500],
    			['name' => '关羽','sex' => 0,'age' => 53,'salary' => 4700],
		    ];
            $num = Db::table('staff')->insertAll($data);
            return $num?'插入成功'.$num.'条数据' :'插入失败';

            //为避免在最终方法中传参,使用data()方法打包数据
            $num = Db::table('staff')->data($data)->insertAll();
            return $num?'插入成功'.$num.'条数据' :'插入失败';
        }

        public function update(){

            //9.更新操作update,必须基于前置查询操作,模板不允许无条件更新
            $num = Db::table('staff')
            ->where('salary','<=','5000')
            //用字符串描述表达式,用到了salary的原始值,引用Db::raw()方法
            ->data(['salary'=>Db::raw('salary+1000')])
            ->update();

            //直接根据主键更新
            $num = Db::table('staff')->update(['sex'=>1,'staff_id'=>13]);
            return $num ? $num.'条数据被更新':'更新失败';
        }

        public function delete(){

            //10.删除操作delete(),一般不直接使用删除操作,而是软删除,即用update更新操作代替delete操作,毕竟用户数据非常难得
            //删除操作同样基于前置查询,不允许无条件删除
            $num = Db::table('staff')->delete(19);
            //多个主键同时传入
            $num = Db::table('staff')->delete([1,3,5]);

            $num = Db::table('staff')->where('salary','>','7000')->delete();

            //删除表的全部数据
            //$num = Db::table('staff')->delete(true);

        }

}
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议