Blogger Information
Blog 7
fans 0
comment 0
visits 5067
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数据库原生查询与查询构造器--5.23作业
弓长木子的博客
Original
678 people have browsed it

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);

        }

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post