Laravel中如何使用Eloquent ORM查询数据_Laravel模型查询常用操作【深入】

发布时间 - 2026-01-24 00:00:00    点击率:
查不到数据主因是模型配置错误或查询未终结;需显式声明表名、主键及类型,链式查询后必须调用get()/first()等终结方法,时间范围推荐用whereBetween配合Carbon对象。

直接查不到数据,大概率不是语法写错,而是模型配置、查询上下文或数据库状态没对上。

模型没指定表名或主键会静默失败

Eloquent 默认按模型类名复数形式推断表名(Userusers),主键默认是 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批量管理实战