|
1.查询构造器的工作原理? 在查询构造器中,分为 查询类与生成类,生成类不可被外部调用,查询类调用生成类生成SQL语句,然后丢给 连接类 进行操作, 返回一个结果集 或者受影响的条数;
【所以重点在查询类】
2.什么是链式操作?为什么要用链式操作?
【链式操作的功能和目的就是快速生成查询条件】
3.数据表的查询条件是如何生成的?
两个方法----3.1.1 where():AND条件
3.1.2 whereOr():OP条件
3种格式---- 3.2.1 where('字段名','表达式','查询条件')
3.2.2 where(['字段名'=>['表达式','查询条件'],…………])
3.2.3 where(function($quwey){//链式查询语句;})
4.如何用查询构造器实现数据表的增删改查?【curd 操作 】
4.1 新增------1. insert(['字段']=>'值']) 2. insertAll(['二维数组'])
4.2 更新------1. update(['字段'=>'值']) 2. setinc/setDec('字段',步长)
4.3 读取------1. find(主键) 2. select(主键) 3.value('字段') //查询一个值 4.column('字段') // 查询一个列
4.4 删除------1. delete(主键) 2. delete(true)
来来来 贴代码拉 1234 都贴这里- <?php
- namespace app\articles\controller;
- use think\Db;
- class Dbc
- {
- public function mc1()
- {
- return '进来了mc1 }
- public function mc2()
- {
- // 1. Db::table 用来选择数据表 返回的是一个 query对象
- // 2. 调用下一个方法 where 查询条件
- // 3. 调用 find() 该方法不是链式方法 只用于输入 但是上面两个是链式方法
-
- dump(
- Db::table('staff')
- ->where('id',4)
- ->find() //这个find() 只能查询到一条结果
- );
- }
- public function mc3()
- {
- // 改一下 where 参数试试
- dump(
- Db::table('staff')
- ->where('id','<',4) // 中间不输入 默认是 =
- ->select() //这个 select 可以查询到很多条结果
- );
- }
- public function mc4()
- {
- // 改一下 where 参数试试 这次传入输入
- dump(
- Db::table('staff')
- ->where([
- 'id'=>['<',5],
- 'gongzi' =>['>',3000]
- ])
- ->select() //这个 select 可以查询到很多条结果
- );
- }
- // 闭包调用
- public function mc5()
- {
- dump(
- Db::table('staff')
- ->where(
- function ($query){
- $query->where('id','<',5)
- ->where('gongzi','>',5000);
- }
- )
- ->select()
- );
- }
- // 楼上闭包函数的改写
- public function mc6()
- {
- dump(
- Db::select(
- function ($query)
- {
- $query->table('staff') //因为$query 可以调用所有的表
- ->field(['name'=>'姓名','juese'=>'职位','gongzi'=>'工资']) //指定查询条件
- ->where([
- 'id'=>['<',6],
- 'gongzi'=>['>',3000]
- ]);
- }
- )
- );
- }
- // 这是引入变量的查法
- // http://localhost/public/index.php/articles/dbc/mc7/lma/5000
- public function mc7($lma)
- {
- dump(
- Db::select(
- function ($query) use($lma)
- {
- $query->table('staff') //因为$query 可以调用所有的表
- ->field(['name'=>'姓名','juese'=>'职位','gongzi'=>'工资']) //指定查询条件
- ->where([
- 'id'=>['<',6],
- 'gongzi'=>['>',$lma]
- ]);
- }
- )
- );
- }
- //上面的是使用构造器查询, 现在使用构造器添加
- public function mc8()
- {
- $lma = Db::table('staff')
- ->insert([
- 'name'=>'小顾',
- 'age'=>19,
- 'gongzi'=>7500,
- 'juese'=>'高级程序猿'
- ]);
- return $lma?'成功添加了'.$lma.'条记录':'添加失败 }
- // 利用查询构造器实现批量添加
- public function mc9()
- {
- $lma = Db::table('staff')
- ->insertAll([
- ['name'=>'小顾','age'=>19,'gongzi'=>3500,'juese'=>'学徒'],
- ['name'=>'小顾1','age'=>19,'gongzi'=>2500,'juese'=>'学徒'],
- ['name'=>'小顾2','age'=>19,'gongzi'=>2500,'juese'=>'学徒'],
- ]);
- return $lma?'成功添加了'.$lma.'条记录':'添加失败 }
- //利用查询构造器更新一条记录
- public function mc10()
- {
- $lma = Db::table('staff')
- ->update([
- 'id'=>9, //必须要有个更新条件 例如这个主键
- 'name'=>'金',
- ]);
- return $lma?'成功更新了'.$lma.'条记录':'更新失败 }
- // 改写上述 10 的语句 把 查询条件提出来
- public function mc12()
- {
- $lma = Db::table('staff')
- ->where('id',9) //将值单独提出来
- ->update([
- 'name'=>'金老大',
- ]);
- return $lma?'成功更新了'.$lma.'条记录':'更新失败 }
- // 查询构造器中的自增 【备注 自增自减可以延迟操作 这样写 setInc('gongzi',100,3) 表示三秒后操作,据说可以缓解数据库性能】
- public function mc13()
- {
- $lma = Db::table('staff')
- ->where('id',2)
- ->setInc('gongzi',100); // 自增 第一个是字段,第二个是自增的值
-
- return $lma?'成功昂工资加了100':'工资没变';
- }
- // 查询构造器中的自减
- public function mc14()
- {
- $lma = Db::table('staff')
- ->where('id',2)
- ->setDec('gongzi',200); // 自增 第一个是字段,第二个是自增的值
-
- return $lma?'因为你迷住了本程序猿我要扣你工资200块':'还是不忍心扣啊';
- }
- // 查询构造器中的查询 【这货神经,明明没写出 value 只说了 find() 和 select ,这居然将value】
- public function mc15()
- {
- //value 字段 默认值
- $lma = Db::table('staff')
- ->where('id',9)
- ->value('name');
- return '查询到的结果为'.$lma;
- }
- // 同样是查询构造器中的查询 这次用column('字段','字段') 输出一列 类似select
- public function mc16()
- {
- //value 字段 默认值
- $lma = Db::table('staff')
- ->where('id','>',5)
- ->column('name');
- // 我试了一下 如果还用value 那么只能有一个值
- // 如果用 select('name'); 得到的是空
- // 如果是 return 结果居然报错——因为结果是个数组
- // 如果是 column('name','age') 输出的结果 任然是数组 但是 数组的键是 name ,值是age
- // return '查询到的结果为'.$lma;
- dump($lma);
- }
- //查询构造器中的删除
- public function mc17()
- {
- // $lma = Db::table('staff')
- // ->where('id',10)
- // ->delete(); // 这是我设想中写法 其实不用这么写 delete 可以直接删除主键
- $lma = Db::table('staff')
- ->delete(11); // 直接写入主键的值
- // 也可以一次删除多条 但是必须写条件
- // deletc([10,11]) ; 这是多条删除的写法
- // 清空表 啥都没有的写法 -> delete(true);
- return $lma?'成功辞退了小顾2':'小顾2私活赖着不走';
- }
- }
复制代码
|
|