Laravel中如何使用Eloquent ORM查询数据_Laravel模型查询常用操作【深入】
发布时间 - 2026-01-24 00:00:00 点击率:次查不到数据主因是模型配置错误或查询未终结;需显式声明表名、主键及类型,链式查询后必须调用get()/first()等终结方法,时间范围推荐用whereBetween配合Carbon对象。
直接查不到数据,大概率不是语法写错,而是模型配置、查询上下文或数据库状态没对上。
模型没指定表名或主键会静默失败
Eloquent 默认按模型类名复数形式推断表名(User → users),主键默认是 id。如果表名不规则(比如 user_info)或主键是 uid,不显式声明就会查空或报错。
- 在模型中加
protected $table = 'user_info'; - 主键非
id时加protected $primaryKey = 'uid'; - 主键不是整型(如 UUID)必须加
public $incrementing = false;和protected $keyType = 'string';
where() 链式调用后必须加 get() 或 first()
User::where('status', 1) 返回的是 Builder 实例,不是结果集。不执行终结方法,SQL 根本不会发出去。
- 查多条:用
get()→ 返回Collection - 查单条:优先用
first()(带条件)或find($id)(主键查找) - 只取字段:用
pluck('name')或value('email'),避免构造完整模型实例
User::where('status', 1)->orderBy('created_at', 'desc')->take(5)->get();
时间范围查询慎用 whereDate() 和 whereBetween()
whereDate('created_at', '2025-05-01') 会忽略时分秒,但底层走的是 DATE() 函数,在有索引的 created_at 字段上可能无法命中索引;而 whereBetween() 如果手写时间字符串格式不对(如缺 T00:00:00),MySQL 可能自动类型转换失败。
- 推荐用
whereBetween('created_at', [now()->startOfDay(), now()->endOfDay()]) - 或手动构造范围:
where('created_at', '>=', '2025-05-01 00:00:00')->where('created_at', ' - 确认数据库时区和 PHP 时区一致,否则
now()生成的时间可能跨天
关联预加载没写 with() 就会 N+1
比如循环查用户再查其头像:foreach ($users as $u) { $u->avatar; },会为每个用户发起一次额外查询。Eloquent 不会自动合并。
- 提前用
with('avatar')一次性关联查出 - 嵌套关联写成
with(['posts.comments' => function ($q) { $q->latest(); }]) - 避免
load()在循环里调用——它只是延迟加载,照样 N+1 - 用
toSql()检查生成的 SQL:User::with('profile')->toSql()看是否真合并了
User::with(['posts' => function ($q) {
$q->where(
'published', true)->limit(3);
}])->get();
最常被忽略的是模型的 $casts 和访问器(accessor)对查询结果的影响:它们只作用于已查出的数据,不影响 WHERE 条件;想按 JSON 字段某个键过滤,得用 whereJsonContains(),不能靠 cast 后的属性名去 where。
# mysql
# laravel
# ai
# red
# carbon
# sql
# String
# date
# 整型
# 字符串
# public
# protected
# Collection
# 类型转换
# 对象
# table
# 数据库
# 主键
# 的是
# 链式
# 就会
# 加载
# 报错
# 会为
# 查询结果
# 多条
# 只作
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php485函数参数是什么意思_php485各参数详细说明【介绍】
如何在阿里云域名上完成建站全流程?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
IOS倒计时设置UIButton标题title的抖动问题
如何在建站主机中优化服务器配置?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何实现模型的全局作用域?(Global Scope示例)
Android okhttputils现在进度显示实例代码
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何在企业微信快速生成手机电脑官网?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何在阿里云香港服务器快速搭建网站?
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
JS去除重复并统计数量的实现方法
如何快速生成凡客建站的专业级图册?
微信推文制作网站有哪些,怎么做微信推文,急?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel如何记录自定义日志?(Log频道配置)
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Python数据仓库与ETL构建实战_Airflow调度流程详解
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Mybatis 中的insertOrUpdate操作
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在IIS中新建站点并配置端口与IP地址?
如何用PHP快速搭建CMS系统?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
如何快速打造个性化非模板自助建站?
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何快速搭建FTP站点实现文件共享?
Linux系统运维自动化项目教程_Ansible批量管理实战


