Skip to main content

什么是查询构建器

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

排序 / 分组 / 限制

子查询

向量相似度检索

对保存了嵌入向量的列,可以使用 whereVectorSimilarTo 只检索与指定向量相近的记录。向量列需要在迁移中定义为 vector 类型(迁移中的向量列)。
whereVectorSimilarTo 会按相似度从高到低排序。如果不需要指定最小相似度,只想显式地按距离排序,可以使用 orderByVectorDistance。想在返回的列中包含距离时,可以通过 selectVectorDistance 指定别名。
这些方法会被转换为数据库提供的向量运算符。请确认所使用的数据库支持向量类型与相关运算,在 PostgreSQL 中请启用 pgvector 扩展。

Raw 表达式

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

INSERT / UPDATE / DELETE

INSERT

UPSERT

UPDATE

DELETE

按条件构建查询(when)

调试

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

小结

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