5根据条件查询最大id的值_通过 Laravel 查询构建器实现复杂的查询语句

在上一篇教程中,我们通过查询构建器实现了简单的增删改查操作,而日常开发中,往往会涉及到一些更复杂的查询语句,比如连接查询、子查询、排序、分页、聚合查询等等,这一篇教程我们将围绕这些内容展开探讨。

查询小技巧

我们首先来介绍几个 Laravel 自带的语法糖,可以帮助我们快速获取期望的查询结果,提高编码效率。

有时候,我们想要获取的并不是一行或几行记录,而是某个字段的值,你当然你可以查询到一行记录后从结果对象中获取指定字段的值,但是 Laravel 为我们提供了更便捷的语法:

$name = '学院君';
$email = DB::table('users')->where('name', $name)->value('email');

这样,通过 value 方法返回的就是指定字段的值,无需做额外的判断和提取操作。

如果你想要判断某个字段值在数据库中是否存在对应记录,可以通过 exists 方法快速实现:

$exists = DB::table('users')->where('name', $name)->exists();

如果存在,返回 true,否则返回 false。该方法还有一个与之相对的方法 doesntExist()

你一定有过这样的经历,从数据库获取指定查询结果后,以主键 ID 值为键,以某个字段值为值构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样的问题,在 Laravel 中,我们只需在查询构建器上调用 pluck 方法即可:

$users = DB::table('users')->where('id', ', 10)->pluck('name', 'id');

该查询返回的结果如下:

4e344dadf5e1fb76ac4f714b9e7296ed.png

注意,我们在传递参数到 pluck 方法的时候,键对应的字段在后面,值对应的字段在前面。

此外,有的时候,我们从数据库返回的结果集比较大,一次性返回进行处理有可能会超出 PHP 内存限制,这时候,我们可以借助 chunk 方法将其分割成多个的组块依次返回进行处理:

$names = [];
DB::table('users')->orderBy('id')->chunk(5, function ($users) use (&$names) {
    foreach ($users as $user) {
        $names[] = $user->name;
    }
});

以上代码的意思是对 users 按照 id 字段升序排序,然后将获取的结果集每次返回5个进行处理,将用户名依次放到 $names 数组中。打印 $names,结果如下:

66a698b67cf8652c79e0b441535dd871.png

聚合函数

在开发后台管理系统时,经常需要对数据进行统计、求和、计算平均值、最小值、最大值等,对应的方法名分别是 countsumavgminmax

$num = DB::table('users')->count();       # 计数     9
$sum = DB::table('users')->sum('id');     # 求和    45
$avg = DB::table('users')->avg('id');     # 平均值   5
$min = DB::table('users')->min('id');     # 最小值   1
$max = DB::table('users')->max('id');     # 最大值   9

高级 Where 查询

前面我们已经用到过通过 where 方法构建查询子句,这里我们将系统介绍 WHERE 查询子句的各种构建。

基本查询

基本查询

最基本的 WHERE 查询子句就是通过 where 方法进行简单查询了:

DB::table('posts')->where('views', 0)->get();      # 此处等号可以省略
DB::table('posts')->where('views', '>', 0)->get();  
DB::table('posts')->where('views', '<>', 0)->get();

第一个参数表示字段名,第二个参数表示运算符(支持SQL所有运算符),第三个参数表示比较值。

like查询

有时候我们可能会对字段进行模糊查询,尤其是字符串匹配的时候:

DB::table('posts')->where('title', 'like', 'Laravel学院%')->get();

and查询

如果有多个 WHERE 条件怎么办?在查询构建器中,可以通过方法链轻松搞定:

DB::table('posts')->where('id', ', 10)->where('views', '>', 0)->get();

上述代码表示获取 where id < 10 and views > 0 的数据库记录,更多的条件用更多的 where 方法即可。此外,我们还可以通过传入数组参数的方式实现上述代码同样的功能:

DB::table('posts')->where([
    ['id', ', 10],
    ['views', '>', 0]
])->get();

or查询

在日常查询中,or 条件的查询也很常见,在查询构建器中,可以通过 orWhere 方法来实现:

DB::table('posts')->where('id', ', 10)->orWhere('views', '>', 0)->get();

上述代码表示获取 where id < 10 or views > 0 的数据库记录,多个

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值