数据库查询构造器与链式操作
- 查询构造器的工作原理
文章图片
- 查询请求通过查询类和生成类,生成sql语句发到连接类与数据库进行沟通。
- 查询类Query.php里面,Builder.php是生成类,Connection.php链接类,connector文件夹下的是链接器
- 什么是链式操作?为什么要用链式操作?
它是用来快速生成查询操作的,因为快,方便,易用。它的所有查询方法来自query.php。
文章图片
dump(
Db::table('staff')
->where('id','=',2)
->find());
如果是等于可以省略
find()只会返回一条
select()可返回多条。
- 数据表的查询条件是如何生成的?
文章图片
生成查询三种方法:
- 表达式
- 数组
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],
]);
})
);
使用修改字段名
- 如何用查询构造器实现数据表的增删改查(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自减('字段',步骤,[延时])
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- 数据库设计与优化
- 数据库总结语句
- MySql数据库备份与恢复
- 数据库|SQL行转列方式优化查询性能实践
- MySQL数据库的基本操作