跳转到主要内容

什么是查询构建器

Laravel 的查询构建器提供了一套流式接口来构建并执行数据库查询。从 DB 门面的 table() 方法开始,链式组合出查询。
底层使用 PDO 参数绑定,会自动防御 SQL 注入。
查询构建器可在 Laravel 支持的所有数据库(MySQL、MariaDB、PostgreSQL、SQLite、SQL Server)上运行,切换数据库时代码不变。

与 Eloquent 的选择

读取数据

取全部

get() 返回 Illuminate\Support\Collection。每条记录是 stdClass 对象。

取单条

抽取某列

大量数据分块处理

分块处理时若同时更新或删除记录,请使用 chunkById()chunk() 可能出现记录偏移。

流式处理(LazyCollection)

聚合

是否存在

SELECT 子句

WHERE 子句

基础条件

条件分组

whereIn / whereBetween / whereNull

whereLike

whereAny / whereAll

whereNullSafeEquals

whereNullSafeEquals / orWhereNullSafeEquals 将两个 NULL 也视为相等(对应 MySQL <=>、PostgreSQL IS NOT DISTINCT FROM)。
where('column', null) 会变成 WHERE column IS NULL,而 whereNullSafeEquals('column', $value) 无论 $value 是否为 null 都能一致工作,尤其适用于用户输入可能为 null 的场景。

JOIN

子查询 JOIN

排序 / 分组 / 限制

子查询

Raw 表达式

Raw 表达式会作为 SQL 字符串直接拼入。若直接传入用户输入会导致 SQL 注入。请务必使用绑定。

INSERT / UPDATE / DELETE

INSERT

UPSERT

UPDATE

DELETE

按条件构建查询(when)

调试

dd() 只用于调试,生产环境请勿使用。使用 toSql()getBindings() 更安全。

小结

查询构建器比 Eloquent 更底层,返回 stdClass 而非模型实例。 若不需要关联或模型事件(Observer),构建器更简单也更快。
最后修改于 2026年7月18日