Laravel如何使用Eloquent模型_Laravel使用Eloquent模型方法【ORM】
Lara vel中正确使用Eloquent需:一、创建模型并配置$table、$primaryKey、$fillable;二、用all()、find()、first()、findOrFail()、get()执行查询;三、通过new+sa ve、create或forceCreate插入数据;四、用实例sa ve、update或where+update更新;五、用delete、destroy或where+delete删除。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
在Lara vel项目中与数据库打交道,Eloquent模型无疑是首选利器。但话说回来,如果配置不当或调用方式有误,你可能会遇到查询失败、数据写不进去,或者关联关系怎么也加载不出来的尴尬。别担心,下面我们就来拆解一下正确使用Eloquent模型的具体方法,让你能游刃有余地操作数据。
一、创建并配置模型类
模型是Eloquent操作数据库的核心入口。它必须继承自Illuminate\Database\Eloquent\Model这个基类。这里有个关键点:模型默认会按照命名约定去猜测对应的数据表名,但如果你的表名不按常理出牌,那就必须显式声明映射关系。否则,批量赋值被拒绝、查询定位出错,甚至时间戳异常,这些问题都可能找上门来。
第一步,打开终端,用Artisan命令快速生成模型文件:php artisan make:model User。
第二步,打开生成的app/Models/User.php文件。确认类已经正确继承,然后根据你的实际数据库表结构,调整以下几个核心属性:
如果你的数据库表名是my_users,而不是Lara vel默认推测的复数形式“users”,那么必须显式设置:protected $table = 'my_users';。
如果主键字段不是简单的id,而是user_id,记得添加:protected $primaryKey = 'user_id';。
最后,如果你打算使用便捷的create()方法进行批量赋值,就必须提前定义好哪些字段是允许填充的:protected $fillable = ['name', 'email', 'password'];。这一步是安全防护,可别忽略了。
二、执行基础查询操作
Eloquent提供了多种静态方法来获取数据,但每种方法的返回类型和异常处理机制都不同。用错了,很可能导致空对象访问错误,或者程序静默失败了你却浑然不知。
获取全部记录,用User::all(),它会返回一个Illuminate\Database\Eloquent\Collection集合实例。
按主键查找单条记录,User::find(1)是标准操作。需要注意的是,如果找不到记录,它会返回null,而不是抛出异常。
想按条件查找第一条匹配的记录?可以这样:User::where('email', 'test@example.com')->first()。
在某些场景下,比如路由模型绑定,如果查不到记录你希望直接抛出404异常,那就用User::findOrFail(1),它能帮你省去不少手动判断的代码。
当然,更复杂的条件查询离不开get()方法。例如:User::where('active', 1)->get()。它可以完美配合orderBy、limit等链式调用,最终返回一个包含多条记录的集合。
三、插入新数据
向数据库插入新记录,主要有两种思路:先实例化再保存,或者直接批量创建。它们的核心区别在于是否触发模型事件(比如creating、created),以及是否受$fillable属性的约束。
第一种方式比较直观:先new一个模型实例,然后逐字段赋值,最后调用sa ve()。$user = new User; $user->name = 'Tom'; $user->email = 'tom@example.com'; $user->sa ve();
第二种方式更简洁,使用create()方法进行批量赋值:User::create(['name' => 'Jerry', 'email' => 'jerry@example.com']);。不过,这里有个前提:传入的字段必须在$fillable属性中声明过,否则会被Eloquent拒绝。
如果确实需要跳过$fillable的检查,强制插入所有给定的属性,可以使用forceCreate()方法:User::forceCreate(['name' => 'Admin', 'email' => 'admin@local']);。但务必谨慎使用,以免引入安全风险。
四、更新已有记录
更新操作同样有两条路径:通过模型实例更新,或者使用静态方法进行批量更新。前者会完整触发模型的生命周期事件和访问器、修改器,后者则通常更高效,但会绕过模型的这些“钩子”。
最常见的模式是“先查后改再保存”:$user = User::find(1); $user->name = 'Updated Name'; $user->sa ve();。
当你需要根据条件批量更新多条记录时,静态的update()方法会更高效:User::where('id', 1)->update(['name' => 'New Name']);。
对于已经加载到内存的模型实例,你也可以直接调用update()方法:$user->update(['email' => 'new@example.com']);。这种方式依然会触发模型事件。
这里有个性能小贴士:如果需要更新大量记录,务必结合where条件使用批量update,避免遍历模型集合逐个调用sa ve(),从而引发N+1查询问题。
五、删除数据记录
删除行为分为“软删除”和“硬删除”。Eloquent默认执行的是硬删除,即直接从数据库移除记录。而软删除则是一种更温和的方式,它只是给记录打上一个删除标记,数据本身还在。
通过模型实例删除很简单:$user = User::find(1); $user->delete();。
你也可以使用静态方法destroy(),通过主键来删除:User::destroy(1);。它也支持传入数组一次性删除多条:User::destroy([1, 2, 3]);。
按条件批量删除也很方便:User::where('created_at', 'subDays(30))->delete();。
如果你想启用软删除功能,需要在模型中引入SoftDeletes trait,并在数据库迁移中添加deleted_at字段。启用后,上面提到的delete()和destroy()方法就不会真正删除数据,而是设置deleted_at时间戳。同时,所有常规查询会自动排除已被软删除的记录。当然,你也可以通过withTrashed()或onlyTrashed()来查询这些被“隐藏”的记录。
相关攻略
Lara vel 集合:告别原生数组的繁琐,拥抱优雅的数据处理 在Lara vel项目中,当你需要对数组或数据库查询结果进行筛选、转换或分组时,如果还停留在使用原生PHP数组函数,那体验可就不太美妙了——代码冗长,难以链式调用,可读性也大打折扣。这时候,Lara vel集合(Collection)就
本文介绍在 Lara vel + MySQL 环境下,当目标百分比未严格落在 percentage_from 与 percentage_to 区间内时,如何高效、准确地查找到逻辑上“最邻近”的配置记录——通过消除区间间隙并利用数据库范围查询实现零误差匹配。 如何在 Lara vel 中根据给定百分比
Lara vel Observer 中数据库操作事务失效需手动处理:一、将 Observer 逻辑移入 DB::transaction 闭包;二、Observer 内手动启停事务(慎用);三、改用事件监听器并绑定事务;四、用 SA VEPOINT 实现局部回滚。 在 Lara vel 项目里,你是否
Lara vel视图无法渲染?先检查Blade模板的“身份证”和“住址” 在Lara vel项目里,视图文件创建好了,页面却死活渲染不出来,或者干脆抛出一个冷冰冰的“View not found”错误——这事儿不少开发者都遇到过。其实,十有八九是Blade模板的“身份”或“住址”没对上框架的规矩。别
本文详解如何在 Lara vel 中通过本地作用域(Local Scopes)封装条件逻辑,实现对 Client 关联的 Credit 模型按 status = 1(ACTIVE)高效筛选,并在 Livewire 视图中清晰展示“活跃信贷数”,避免 N+1 查询与重复条件硬编码。 在业务开发中,我们
热门专题
热门推荐
iPhone 17:为何成为苹果史上最长寿的爆款? 最近科技圈有个消息传得挺热:iPhone 17标准版的生产周期被大幅拉长了。这可不是简单的产能调整,背后是苹果近期完成的大规模产能扩展。看来,这款热门机型已经瞄准了今年下半年的双11战场,准备再掀一波销售热潮。 消息一出,不少网友都在猜测原因。矛头
在快节奏的都市生活中,一款兼具便携性与环保特性的出行工具正成为越来越多人的选择 城市通勤的“最后一公里”难题,催生了对灵活出行方案的持续探索。近期,小米有品推出的mini智能电动平衡车,以其独特的设计理念和深度智能化功能,迅速吸引了市场的目光。它不仅仅是一款酷玩装备,更切实地为青少年和上班族提供了高
在数字化教育蓬勃发展的当下,家长们为孩子挑选学习设备时,既希望设备具备护眼功能,又期望能满足多样化的学习需求。传统平板电脑功能虽丰富,但长时间使用易引发视力疲劳;普通学习机功能又相对单一,难以契合现代教育的发展趋势。在此背景下,科大讯飞AI学习机系列凭借先进的护眼技术与智能学习系统,成为众多家长和学
目录 ethzilla是谁? ETHZilla独特其他ETH DAT之处 1、Peter Thiel持股ETHZilla近30% 2、Vitalik和以太坊基金会入局 3、聚焦DeFi和链上策略 结语 以太坊财库概念的热度,最近真是肉眼可见。伴随着这股热潮,ETH价格也强势突破了4700美元,距离历
全球彩电市场:存量博弈下的冰与火之歌 最近,行业调研机构奥维睿沃(A VC Revo)发布了一份引人关注的报告,揭示了2025年全球彩电市场的真实图景。数据显示,全球彩电整体出货量达到2 64亿台,同比仅微跌0 1%,市场基本盘看似稳固。 然而,拆开来看,内部结构正在发生深刻变化。LCD液晶电视依然





