Correction status:Uncorrected
Teacher's comments:
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); } } ?> 运行实例 » 点击 "运行实例" 按钮查看在线实例