博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel查询构造器的使用方法整理
阅读量:6223 次
发布时间:2019-06-21

本文共 3422 字,大约阅读时间需要 11 分钟。

1.结果集

1.1从一张表获取所有行,get方法获取所有行

$users = DB::table('users')->get();

获取列的值

foreach ($users as $user) {    echo $user->name; }

1.2.从一张表中获取一行/一列,first方法获取单行

$user = DB::table('users')->where('name', 'John')->first(); echo $user->name;

1.3.如果想要获取包含单个列值的数组,可以使用lists方法

$titles = DB::table('roles')->lists('title'); foreach ($titles as $title) {
echo $title;

1.4.聚合函数,比如count, max, min, avg, 和 sum,你可以在构造查询之后调用这些方法

$users = DB::table('users')->count(); $price = DB::table('orders')->max('price'); $price = DB::table('orders') ->where('finalized', 1) ->avg('price')

1.5.我们并不总是想要获取数据表的所有列,使用select方法查询指定列

$users = DB::table('users')->select('name', 'email as user_email')->get();

1.6.distinct方法允许你强制查询返回不重复的结果集

$users = DB::table('users')->distinct()->get();

1.7.内连接

$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();

1.8.左连接

$users = DB::table('users')  ->leftJoin('posts', 'users.id', '=', 'posts.user_id')  ->get();

2.where子句

调用where最基本的方法需要三个参数,第一个参数是列名,第二个参数是一个数据库系统支持的任意操作符,第三个参数是该列要比较的值。

例如,下面是一个验证“votes”列的值是否等于100的查询:

$users = DB::table('users')->where('votes', '=', 100)->get();

为了方便,如果你只是简单比较列值和给定数值是否相等,可以将数值直接作为where方法的第二个参数:

$users = DB::table('users')->where('votes', 100)->get();

其它操作符来编写where子句:

$users = DB::table('users') ->where('votes', '>=', 100) ->get(); $users = DB::table('users')  ->where('votes', '<>', 100)  ->get(); $users = DB::table('users')  ->where('name', 'like', 'T%')  ->get();

你可以通过方法链将多个where约束链接到一起,也可以添加or子句到查询,orWhere方法和where方法接收参数一样:

$users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();

whereBetween方法验证列值是否在给定值之间(whereNotBetween方法验证列值不在给定值之间):

$users = DB::table('users')  ->whereBetween('votes', [1, 100]) ->get();

whereIn方法验证给定列的值是否在给定数组中(whereNotIn方法验证给定列的值不在给定数组中):

$users = DB::table('users')  ->whereIn('id', [1, 2, 3])  ->get();

whereNull方法验证给定列的值为NULL(whereNotNull方法验证给定列的值不是NULL):

$users = DB::table('users') ->whereNull('updated_at') ->get();

3.orderBy方法

$users = DB::table('users') ->orderBy('name', 'desc') ->get();

4.groupBy和having方法用于对结果集进行分组

$users = DB::table('users')  ->groupBy('account_id')  ->having('account_id', '>', 100)  ->get();

ps:a.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。

     b.GROUP BY 子句用来分组 WHERE 子句的输出。
     c.HAVING 子句用来从分组的结果中筛选行。

5.skipskip/take,想要限定查询返回的结果集的数目,或者在查询中跳过给定数目的结果

$users = DB::table('users')->skip(10)->take(5)->get();

6.insert方法

DB::table('users') ->insert([ ['email' => 'taylor@example.com', 'votes' => 0],            ['email' => 'dayle@example.com', 'votes' => 0] ]);

如果数据表有自增ID,使用insertGetId方法来插入记录将会返回ID值:

$id = DB::table('users') ->insertGetId(  ['email' => 'john@example.com', 'votes' => 0] );

7.update方法

DB::table('users')  ->where('id', 1)  ->update(['votes' => 1]);

查询构建器还提供了方便增减给定列名数值的方法,这两个方法都至少接收一个参数:需要修改的列。第二个参数是可选的,用于控制列值增加/减少的数目。

DB::table('users')->increment('votes'); DB::table('users')->increment('votes', 5); DB::table('users')->decrement('votes'); DB::table('users')->decrement('votes', 5);

在操作过程中你还可以指定额外的列进行更新:

DB::table('users')->increment('votes', 1, ['name' => 'John']);

8.delete方法

DB::table('users')->delete();

在调用delete方法之前可以通过添加where子句对delete语句进行约束:

DB::table('users')->where('votes', '<', 100)->delete();

如果你希望清除整张表,也就是删除所有列并将自增ID置为0,可以使用truncate方法:

DB::table('users')->truncate();

 

转载于:https://www.cnblogs.com/lamp01/p/6666514.html

你可能感兴趣的文章
《编写高质量代码:改善c程序代码的125个建议》——建议3-4:避免直接在浮点数中使用“==”操作符做相等判断...
查看>>
《软件开发践行录——ThoughtWorks中国区文集》一一2.1 项目背景
查看>>
一位开发者的 Linux 容器之旅
查看>>
《实践者的研究方法》—— 第2章 软件工程 2.3 软件工程实践
查看>>
《妥协的完美主义:优秀产品经理的实践指南(卷二)》一2.4 团队外部协调...
查看>>
《贝叶斯方法:概率编程与贝叶斯推断》——1.8答案
查看>>
《C和C++代码精粹》——1.3 类型系统
查看>>
30个实例详解TOP命令
查看>>
《HTML CSS JavaScript 网页制作从入门到精通 第3版》—— 2.6 段落标记
查看>>
《响应式Web设计实践》一1.6 本书包含哪些内容
查看>>
《Java和Android开发实战详解》——导读
查看>>
《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(三)
查看>>
从学界到业界:关于数据科学的误解与事实
查看>>
3.6 HyperLogLog
查看>>
游戏玩家的福音:在 Ubuntu 上安装开源 VoIP 应用 Mumble
查看>>
《Web性能实践日志》一第1章 WebPageTest内部原理1.1 函数拦截
查看>>
《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系
查看>>
《多核与GPU编程:工具、方法及实践》----3.4 信号量
查看>>
用机器学习的经验指导人生:如何实现学习效率最大化
查看>>
《Hack与HHVM权威指南》——1.6.1 没有类型的变量
查看>>