首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
查询生成器-介绍
查询生成器-运行数据库查询
查询生成器-分块结果
查询生成器-延迟流式处理结果
查询生成器-聚合
查询生成器-Select 语句
查询生成器-原始表达式
查询生成器-Joins
查询生成器-Unions
查询生成器-基础 Where 语句
查询生成器-条件查询语句
查询生成器-Or Where 语句
查询生成器-Where Not 语句
查询生成器-JSON Where 语句
查询生成器-附加 Where 语句
查询生成器-逻辑分组
查询生成器-高级 Where 语句
查询生成器-Where Exists 语句
查询生成器-子查询 Where 语句
查询生成器-全文 Where 子句
查询生成器-排序、分组、限制和偏移量
查询生成器-排序
查询生成器-分组
查询生成器-Limit(限制) & Offset(偏移量)
查询生成器-条件语句
查询生成器-插入语句
查询生成器-更新插入
查询生成器-更新语句
查询生成器-更新 JSON 列
查询生成器-自增和自减
查询生成器-删除语句
查询生成器-悲观锁
查询生成器-调试
分页-介绍
分页-基本用法
分页-对查询构造器结果进行分页
分页-Eloquent ORM 分页
分页-游标分页
分页-手动创建分页
分页-自定义分页 URL
分页-显示分页结果
分页-调整分页链接窗口
分页-将结果转换为 JSON
分页-自定义分页视图
分页-使用 Bootstrap
分页-分页器实例方法
分页-游标分页器实例方法
当前位置:
首页>>
技术小册>>
Laravel(10.x)从入门到精通(十六)
小册名称:Laravel(10.x)从入门到精通(十六)
### 章节:查询生成器 - 运行数据库查询 在Laravel框架中,查询生成器(Query Builder)是一个功能强大的工具,它允许你以面向对象的方式构建和运行数据库查询。这一章将深入探讨如何使用Laravel的查询生成器来执行各种数据库操作,包括选择(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)数据。我们将从基础开始,逐步构建复杂的查询,并学习如何优化查询性能。 #### 一、引言 Laravel的查询生成器提供了一种流畅、表达力强的接口来构建数据库查询。它隐藏了SQL语句的复杂性,使得开发者可以更加专注于业务逻辑的实现。无论是简单的数据检索还是复杂的联接查询,查询生成器都能以简洁的代码实现。 #### 二、基础查询 ##### 2.1 选择数据 要从数据库中检索数据,你可以使用`DB`门面(Facade)或Eloquent模型上的`query()`方法(如果你正在使用Eloquent ORM)。以下是一个使用`DB`门面选择数据的例子: ```php use Illuminate\Support\Facades\DB; $users = DB::table('users')->get(); foreach ($users as $user) { echo $user->name; } ``` 如果你只想选择特定的列,可以使用`select`方法: ```php $users = DB::table('users')->select('name', 'email')->get(); ``` ##### 2.2 添加条件 查询生成器支持多种条件语句,如`where`、`orWhere`、`whereIn`等,用于构建带有条件的查询。 ```php $users = DB::table('users') ->where('votes', '>', 100) ->get(); $users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get(); $users = DB::table('users') ->whereIn('id', [1, 2, 3]) ->get(); ``` ##### 2.3 排序与限制 你可以使用`orderBy`方法对查询结果进行排序,并使用`take`和`skip`(或`offset`)方法来限制查询结果的数量和跳过一定数量的记录。 ```php $users = DB::table('users') ->orderBy('votes', 'desc') ->take(10) ->get(); $users = DB::table('users') ->skip(10) ->take(5) ->get(); ``` #### 三、高级查询 ##### 3.1 联接查询 查询生成器支持多种类型的联接(JOINs),包括内联接(INNER JOIN)、左联接(LEFT JOIN)等。 ```php $users = DB::table('users') ->join('posts', 'users.id', '=', 'posts.user_id') ->select('users.name', 'posts.title') ->get(); $users = DB::table('users') ->leftJoin('posts', 'users.id', '=', 'posts.user_id') ->select('users.name', 'posts.title') ->get(); ``` ##### 3.2 分组与聚合 使用`groupBy`和聚合函数(如`count`、`max`、`min`、`sum`、`avg`)可以对数据进行分组和统计。 ```php $totalVotes = DB::table('posts') ->select(DB::raw('COUNT(*) as total')) ->where('active', 1) ->groupBy('user_id') ->get(); $maxVotes = DB::table('posts') ->select('user_id', DB::raw('MAX(votes) as max_votes')) ->groupBy('user_id') ->get(); ``` ##### 3.3 子查询 Laravel查询生成器也支持子查询,允许你在查询中嵌套其他查询。 ```php $latestPosts = DB::table('posts') ->select('*') ->where('id', function ($query) { $query->select(DB::raw('MAX(id)')) ->from('posts') ->where('user_id', 1); }) ->get(); ``` #### 四、插入、更新与删除数据 ##### 4.1 插入数据 使用`insert`方法可以向数据库表中插入新记录。 ```php 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], ]); ``` ##### 4.2 更新数据 `update`方法用于更新数据库中的现有记录。你可以结合`where`子句来指定哪些记录需要被更新。 ```php DB::table('users') ->where('id', 1) ->update(['votes' => 1]); ``` ##### 4.3 删除数据 使用`delete`方法可以删除数据库中的记录。同样,你可以结合`where`子句来指定哪些记录需要被删除。 ```php DB::table('users')->where('votes', '<', 100)->delete(); // 删除所有记录 DB::table('users')->delete(); ``` #### 五、性能优化 虽然查询生成器提供了极大的便利,但在构建复杂查询时,仍需注意性能问题。以下是一些优化查询性能的建议: - **使用索引**:确保对查询中涉及的列使用索引,可以显著提高查询速度。 - **减少查询次数**:尽可能在一次查询中获取所需的所有数据,避免多次查询数据库。 - **使用预加载(Eager Loading)**:在使用Eloquent ORM时,利用预加载来减少N+1查询问题。 - **查询缓存**:对于不经常变化的数据,可以考虑使用查询缓存来减少数据库访问次数。 - **分析查询**:使用Laravel的调试工具(如Laravel Debugbar)或数据库管理工具来分析查询性能,找出瓶颈所在。 #### 六、总结 Laravel的查询生成器是一个功能强大且灵活的工具,它使得数据库操作变得简单而高效。通过本章的学习,你应该能够掌握如何使用查询生成器来执行基本的和高级的数据库查询,以及如何优化查询性能。记住,良好的数据库设计和查询优化是构建高效Web应用的关键。随着你对Laravel框架的深入了解,你将能够更加熟练地运用查询生成器来应对各种复杂的数据库操作场景。
上一篇:
查询生成器-介绍
下一篇:
查询生成器-分块结果
该分类下的相关小册推荐:
PHP8入门与项目实战(1)
Magento零基础到架构师(目录管理)
经典设计模式PHP版
Magento零基础到架构师(库存管理)
PHP8入门与项目实战(3)
PHP安全之道
PHP面试指南
PHP8入门与项目实战(6)
PHP底层原理及源码分析
全面掌握Magento2-从配置到优化
Laravel(10.x)从入门到精通(七)
Laravel(10.x)从入门到精通(十一)