上QQ阅读APP看书,第一时间看更新
5.3 使用查询构造器
在5.2节的内容中演示了如何通过原生SQL操作数据库,在实际的开发过程中,这种操作用得比较少,原因是手写原生SQL不太方便,容易写错,而ThinkPHP 5为了方便开发者提供了查询构造器。
查询构造器使用Builder(建造者模式,设计模式的一种)设计,而建造者模式最大的特点就是支持链式调用。如下示例就是链式操作的一种:
A::b()->c()->d();
其实实现起来也不难,只要在b/c/d方法执行结束后return当前类实例即可。
查询构造器的基本使用(以CURD为例)在后面介绍。
5.3.1 添加数据
- 添加一条数据
Db::table('user')->insert(['username'=>'admin','password'=>md5(' 111111')]);
- 添加多条数据
Db::table('user')->insertAll([ ['username'=>'admin','password'=>md5('111111')], ['username'=>'admin1','password'=>md5('123456')] ]);
5.3.2 更新数据
- 根据指定条件更新数据
Db::table('user')->where('username','admin')->update(['password' =>md5('123456')]);
- 待更新数据中包含主键更新数据
Db::table('user')->update(['admin_id'=>1,'password'=>md5('123456 ')]);
- 更新指定字段
Db::table('user')->where('username','admin')->setField('password ',md5('111111'));
- 自增一个字段(比如文章增加点击量)
Db::table('article')->where('article_id',1)->setInc('hit',1);
- 自减一个变量(比如扣除库存)
Db::table('user')->where('goods)Id,1)->setDec('stock',1);
5.3.3 查询数据
- 查询一条数据
Db::table('user')->where('username','admin')->find();
- 查询多条数据
Db::table('user')->where('sex','male')->select();
- 查询指定记录的某个字段值
Db::table('user')->where('username','admin')->value('last_login' );
- 查询某一列数据
Db::table('user')->where('sex','male')->column('user_id');
- 批量查询
当数据库数据比较多而服务器内存有限制时可以使用,通过循环来降低资源占用:
- JSON查询
MySQL5.7中新增了JSON类型,作用和MongoDB类似,可以存储非结构化数据。ThinkPHP 5同样也支持JSON类型的查询中。在如下示例中,params为JSON类型:
Db::table('user')->where('params$.phone','13333333333')->find();
请注意params后的$号。
5.3.4 删除数据
- 根据主键删除
Db::table('user')->delete([1,2,3]);
- 根据where删除
Db::table('user')->where('username','admin')->delete();