商城首页欢迎来到中国正版软件门户

您的位置:首页 >Laravel如何使用Eloquent模型_Laravel使用Eloquent模型方法【ORM】

Laravel如何使用Eloquent模型_Laravel使用Eloquent模型方法【ORM】

  发布于2026-04-21 阅读(0)

扫一扫,手机访问

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模型_Lara vel使用Eloquent模型方法【ORM】

在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()。它可以完美配合orderBylimit等链式调用,最终返回一个包含多条记录的集合。

三、插入新数据

向数据库插入新记录,主要有两种思路:先实例化再保存,或者直接批量创建。它们的核心区别在于是否触发模型事件(比如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()来查询这些被“隐藏”的记录。

本文转载于:https://www.php.cn/faq/2318104.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注