数据库查询构造器与链式操作

  1. 查询构造器的工作原理

    数据库查询构造器与链式操作
    文章图片
  • 查询请求通过查询类和生成类,生成sql语句发到连接类与数据库进行沟通。
  • 查询类Query.php里面,Builder.php是生成类,Connection.php链接类,connector文件夹下的是链接器
  1. 什么是链式操作?为什么要用链式操作?
    它是用来快速生成查询操作的,因为快,方便,易用。它的所有查询方法来自query.php。

    数据库查询构造器与链式操作
    文章图片
dump( Db::table('staff') ->where('id','=',2) ->find());

如果是等于可以省略
find()只会返回一条
select()可返回多条。
  1. 数据表的查询条件是如何生成的?

    数据库查询构造器与链式操作
    文章图片

    生成查询三种方法:
  • 表达式
  • 数组
dump( Db::table('staff') ->field(['name','sex','salary']) ->where([ 'id'=>['<=',2], 'salary'=>['>',4500], ]) ->select() );

  • 闭包(推荐)
    函数中的函数,方法中的方法
dump( Db::table('staff') ->field(['name','sex','salary']) ->where( function ($query){ $query ->where('id','<=',2) ->where('salary','>',4500); }) ->select() );

闭包的好处在于,可以引用外部变量
$salary=4000; dump( Db::table('staff') ->field(['name','sex','salary']) ->where( function ($query) use($salary){ $query ->where('id','<=',2) ->where('salary','>',$salary); }) ->select() );

dump( Db::select( function ($query){ $query ->table('staff') ->field('name as 姓名,salary as 工资') ->where([ 'id'=>['<=',2], 'salary'=>['>',4500], ]); }) );

使用修改字段名
  1. 如何用查询构造器实现数据表的增删改查(CURD)操作?

    数据库查询构造器与链式操作
    文章图片

    【数据库查询构造器与链式操作】CURD即增删改查
  • C:Create创建插入
  • U:Update改
  • R:Read读取查询
  • D:Delete删除(不能使用闭包)
$res=Db::table('staff') ->insert([ 'name'=>'乔凡芯', 'sex'=>0, 'salary'=>9000, 'dept'=>'开发部', 'hiredate'=>date('Y-m-d h:i:s', time()), ]); return $res ? '成功添加了'.$res.'条记录' : '添加失败';

$res=Db::table('staff') ->insertAll([ ['name'=>'乔繁皓','sex'=>1,'salary'=>9000,'dept'=>'开发部','hiredate'=>date('Y-m-d h:i:s', time())], ['name'=>'陈玉花','sex'=>0,'salary'=>10000,'dept'=>'设计部','hiredate'=>date('Y-m-d h:i:s', time())], ]); return $res ? '成功添加了'.$res.'条记录' : '添加失败';

更新不能无where条件,除非包含了主键
  • setInc自增
  • setDec自减('字段',步骤,[延时])

    推荐阅读