laravel 查询构建器(连贯操作)
注:laravel 查询返回行的都是 php 的 stdClass 对象实例,不是数组!!!!
1)查询多行(get)
DB::table('table_name')->get();
带偏移和限制的查询(skip take 或 offset limit)(两种用法是一样的)
//skip take
DB::table('table_name')->skip(10)->take(10)->get(); //offset limit
DB::table('table_name')->offset(20)->limit(10)->get();
2)查询一行(first)
DB::table('table_name')->first();
DB::table('table_name')->find(1);
PS:find方法也可以查多行,它可以这样玩 DB::table('table_name')->find([1,2,3,4]);
3)直接查询一个字段(value)
DB::table('table_name')->where('name','Tiac')->value('email');
4)查询一列(pluck)
DB::table('table_name')->where('brand_id','100')->pluck('goods_id');
5)块组结果集(chunk)
使用情景:
假设我们需要查询 1 百万的数据,并对其做处理,一次性查询 1 百万并统一处理势必会对数据产生不小的压力,消耗大量的服务器资源,有没有一种更做优的处理方法?
将 1 百万的查询分成 1000 次 1000 条记录的查询的块查询怎样?? 这个 chunk的作用,chunk方法接口一个闭包函数做回调处理
DB::table('users')->orderBy('id')->chunk(1000, function($users) {
foreach ($users as $user) {
//
}
});
PS:上面只是举例,chunk 貌似不能和 limit 一起用,chunk 默认情况下一次性处理整张表的数据,不过我可以通过自己加判断用 return false 跳出 chunk 操作
6)聚合函数(count max min avg sum 等等)
DB::table('table_name')->count();
PS:其他聚合函数的使用方法一样的,不一一举例了
7)where 条件字句
这个比较多,懒得写了,想看的直接到 laravel 学院看吧,传送门:http://laravelacademy.org/post/6140.html#ipt_kb_toc_6140_8
(where, orWhere, whereNUll, whereIn, whereNotIn, whereBetween, whereNotBetween, whereDate, whereYear, whereMonth, whereDay 等等)
8)orderBy 排序字句
DB::table('table_name')->orderBy('id','desc')->get();
PS:如果想要返回随机的查询结果集,可以使用 inRandomOrder 子句
9)groupBy 分组字句及 having havingRaw 条件子句
DB::table('table_name')->select('goods_id')->groupBy('brand_id')->having('price','>','100')->get();
DB::table('table_name')->select('brand_id')->groupBy('brand_id')->havingRaw('sum(price)','>','10000');
10)使用原生sql表达式(DB::raw 方法)
举个粟子:如果上面第9)点,我们想查询出一个销售额大于10000的品牌及销售额,我们可以这样子写:
DB::table('table_name')->select('brand_id',DB::raw('sum(price) as sales_price'))->groupBy('brand_id')->having('sales_price','>','10000');
11)join 连接查询子句
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
更多用法,看这里:http://laravelacademy.org/post/6140.html#ipt_kb_toc_6140_6
12)insert 插入操作
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
插入多行记录:
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
])
插入成功后返回自增id(使用insertGetId方法)
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
13)update 更新操作
DB::table('users')->where('id', 1)->update(['votes' => 1]);
增、减操作
DB::table('users')->increment('votes', 2);
DB::table('users')->decrement('votes', 1);
increment 和 decrement 方法还有update方法的功能,第三个参数直接写要更新的数据的数组就可以了
DB::table('users')->increment('votes', 1, ['name' => 'Tiac']);
14)删除、清空操作(delete truncate)
DB::table('users')->where('votes', '>', 100)->delete();
DB::table('users')->truncate();
15)使用游标(cursor)
有自己写个框架的同学应该都知道,像 larvel 的 get 方法之类的操作,其实就是先查询获得一个查询结果集(资源),再fetch资源,组装返回一个数组,也就是说它已经先循环了一遍了,你拿到数据后,要处理的话往往又要循环一次数组;
如果查询的数据较多,从效率、性能上考虑,我们可以省略这预先一次的循环(使用游标)
foreach (DB::table('table_name')->cursor() as $row) {
//
}
大概这个样子了,更详情的说明,看这里:http://laravelacademy.org/post/6140.html
laravel 查询构建器(连贯操作)的更多相关文章
- [转]Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询
本文转自:https://laravelacademy.org/post/920.html 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现 ...
- Laravel 数据库实例教程 —— 使用查询构建器对数据库进行增删改查
原文地址:https://blog.csdn.net/lmy_love_/article/details/72832259 获取查询构建器很简单,还是要依赖DB门面,我们使用DB门面的table方法, ...
- Laravel5.1 数据库-查询构建器
今儿个咱说说查询构建器.它比运行原生SQL要简单些,它的操作面儿也是比较广泛的. 1 查询结果 先来看看它的语法: public function getSelect() { $result = DB ...
- laravel5.6操作数据curd写法(查询构建器)
laravel5.6 数据库操作-查询构建器 <?php //laravel5.6 语法 demo示例 namespace App\Http\Controllers;//命名该控制App空间下名 ...
- Yii2 查询构建器 QueryBuilder
查询构造器 QueryBuilder 1.什么是查询构建器 查询构建器也是建立在 DAO 基础之上,可让你创建程序化的.DBMS 无关的 sql 语句,并且这样创建的 sql 语句比原生的 sql 语 ...
- DB门面,查询构建器,Eloquent ORM三者的CURD
一.DB门面 1.insert DB::insert('insert into table(`name`) value(?)', ['test']); 2.update DB::update('upd ...
- laravel增删改查(查询构建器)
1.增 $data = [ 'username' => 'xiaohong', 'nickname' => '小红红', 'email' => '12356788@qq.com', ...
- 定义查询构建器IFeatureLayerDefinition
在宗地出图,需要实现,只显示某一户人的地块.在ArcMap里,有个定义查询,可只显示过滤后的要素. 在代码中,也比较好实现,使用IFeatureLayerDefinition接口即可. IFeatur ...
- yii2 查询构建器
Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...
随机推荐
- arm B和BL指令浅析
arm B和BL指令浅析 B或BL指令引起处理器转移到“子程序名”处开始执行.两者的不同之处在于:(1)BL指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器). ...
- registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
问题是tomcat的版本问题,tomcat新检测机制导致的这个问题,换版本可以解决问题,但不建议这么做,租用服务器不是你说换就换的.其实问题根源是BasicDataSource,BasicDataSo ...
- org.apache.commons
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍. 一.Commons BeanUtils http://jakar ...
- iOSGCD的使用以及死锁的问题
死锁一直都是在使用多线程时,需要注意的一个问题.以前对同步.异步,串行.并行只有一个模糊的概念,想想也是时候整理一下了.再看看之前的博客,已经很久没有干货了[说得好像之前有干货一样],所以,这篇博客, ...
- linux命令--vi,vim
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件.并将光标置于第n行首 vi + filename :打开文件.并将光标置 ...
- 实际应用中的C#加密
在系统的管理员有着实际的应用,对于一个数据库管理系统来说,数据库安全还是挺重要的,所以在存入到数据库的密码通常都是加密的.即使有着hack攻破数据库后,也不会那样的容易的盗取你的账号和密码,这样可以减 ...
- maven 打包如何将依赖打进来
阿斯蒂芬 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupI ...
- Hadoop的集群和优化
Hadoop的集群和优化 Hadoop集群规模小到几个节点就可以组件一个集群,大到由几千个节点组成的超大集群. 在安装Hadoop集群时,把要安装的软件解压到集群内的所有机器上,软件的安装目录也要一致 ...
- asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录
情景: 某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作. 当登录成功,前端继续操作(post后端接口)时发现以下错误: 提供的防伪标记适用于用户“”,但当前 ...
- UVA 11468 AC自动机入门题 记忆化概率dp+ac自动机
/** 链接:https://vjudge.net/problem/UVA-11468 详见lrj训练指南P218 我的是反向求存在模板串的概率. dp[i][j]表示当前i位置选择字符,前面i-1个 ...