查询构造器中的10个最常用的方法
Table(), field(), order(), where(), limit(), insert(), insertAll(), update(), delete()
以及如何获取自增主键和数据打包方法data()
1、查询单条记录
<?php namespace app\index\controller; use think\Db; class Index { //查询单条记录 //table()指定要查询的完整表名,推荐使用 //name()可以省略掉前缀,因为我的表没有前缀,也没有database.php中设置前缀,所以不用它 //推荐数据表不要加前缀,也不要用name(),用table()完全满足要求 //find()方法可以获取到满足条件的记录中的第一个,即只返回单条记录 //如果是根据主键查询,可以直接将主键做为参数传入 //更多的时候,查询条件是通过where()方法传入,可以看到执行效果是一样的 //where(字段名,表达式,查询条件),表达式为=号,可以省略,相等是默认值 public function find() { $res = Db::table('staff') // ->where('staff_id = 10') //where中可以用字符串 // ->where('staff_id', '=', 10) //条件可以分段写 ->where('staff_id', 10) //默认可以省略等号 ->find(); dump($res); } }
执行结果:
array(5) {
["staff_id"] => int(10)
["name"] => string(9) "西门庆"
["sex"] => int(0)
["age"] => int(25)
["salary"] => int(7500)
}
2、用field()指定查询的字段
<?php namespace app\index\controller; use think\Db; class Index { public function find() { $res = Db::table('staff') // ->field('name,age,salary') // ->field(['name','age','salary']) //参数可使用数组 ->field(['name'=>'姓名', 'age'=>'年龄', 'salary'=>'工资']) //给字段设置别名 ->where('staff_id', 11) ->find(); dump($res); } }
执行结果:
array(3) {
["姓名"] => string(6) "赵敏"
["年龄"] => int(30)
["工资"] => int(5000)
}
3、用select()查询满足条件的多条记录
<?php namespace app\index\controller; use think\Db; class Index { public function select() { $res = Db::table('staff') ->field(['name'=>'姓名', 'age'=>'年龄', 'salary'=>'工资']) ->where('salary', '>', 3000) ->order('salary desc') //支持字符串,数组,分段写 ->limit(3) ->select(); dump($res); } }
执行结果:
array(3) {
[0] => array(3) {
["姓名"] => string(6) "紫薇"
["年龄"] => int(27)
["工资"] => int(9900)
}
[1] => array(3) {
["姓名"] => string(9) "宋青书"
["年龄"] => int(40)
["工资"] => int(9800)
}
[2] => array(3) {
["姓名"] => string(12) "金轮法王"
["年龄"] => int(25)
["工资"] => int(9000)
}
}
4、insert()插入单条数据
<?php namespace app\index\controller; use think\Db; class Index { public function insert() { $data = [ 'name'=>'李四', 'age'=>'38', 'sex'=>1, 'salary'=>3800 ]; $num = Db::table('staff') ->data($data) //方法将要新增的记录进行打包 ->insert(); $id = Db::getLastInsID(); //获取最后插入记录的ID return $num?'添加成功'.'id='.$id:'添加失败'; } }
执行结果:
添加成功id=36
5、insertAll()新增多条记录,返回新增记录的条数
<?php namespace app\index\controller; use think\Db; class Index { public function 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') ->data($data) //方法将要新增的记录进行打包 ->insertAll(); return $num?'添加成功'.$num.'条记录':'添加失败'; } }
执行结果:
添加成功3条记录
6、update()更新操作,必须是基于前置查询,不允许无条件更新
<?php namespace app\index\controller; use think\Db; class Index { public function update() { //更新salary大于8000的记录,在原基础上把salary减1000 $num = Db::table('staff') ->where('salary > 8000') ->data(['salary'=>Db::raw('salary-1000')]) //Db::raw()引用原始数据 ->update(); return $num?'更新成功'.$num.'条记录':'更新失败'; } }
执行结果:
更新成功4条记录
7、delete() 删除操作,必须基于前置查询,不允许无条件删除
<?php namespace app\index\controller; use think\Db; class Index { public function delete() { // $num = Db::table('staff')->delete(19); // $num = Db::table('staff')->delete([12,14,18]);//多个主键使用数组传入 $num = Db::table('staff')->where('salary','>',10000)->delete(); //如果想删除全部记录,可直接给delete()方法传入true: delete(true) //$num = Db::table('staff')->delete(true); //数据表后面还要用,此功能课后练习 return $num ? '删除成功'.$num.'条记录~~' : '没有记录被删除'; //提醒: 删除数据是非常危险的操作,强烈建议使用框架提供的软删除来实现,即用更新来模拟删除 } }