当前位置: 首页 > news >正文

laravel中模型中$fillable的用法

在Laravel框架中,$fillable 属性在模型(Model)中扮演着至关重要的角色。它是Laravel Eloquent ORM系统提供的一个安全特性,用于防止所谓的“批量赋值漏洞”(Mass Assignment Vulnerability)。本文将深入探讨 $fillable的用途、如何使用它以及为何它如此重要。

$fillable属性的用途

在日常开发过程中,我们经常需要从用户那里接收数据,并将这些数据保存到数据库中。Laravel提供了方便的批量赋值(Mass Assignment)功能,使得开发者可以一次性赋值多个属性。然而,这项功能如果没有适当的限制,也可能带来安全风险。攻击者可能会通过批量赋值漏洞,向数据库写入不应被修改的字段。为了解决这个问题,Laravel引入了 $fillable属性,让我们定义哪些字段可以被批量赋值。

使用 $fillable

在Laravel的Eloquent模型中,$fillable是一个数组,包含了可以被批量赋值的字段名。通过设置这个属性,任何不在该数组中的字段都不会被批量赋值,从而提高了应用程序的安全性。

举个例子,假设我们有一个 User模型,包含 nameemail, 和 password字段。如果希望这三个字段都可以通过批量赋值来更新,则可以在 User模型中设置如下:

class User extends Model
{protected $fillable = ['name', 'email', 'password'];
}

现在,如果我们使用Eloquent的 create方法或是在实例化模型后调用 fill方法,只有在 $fillable数组中列出的字段会被赋值。

$user = User::create(['name' => 'John Doe','email' => 'john@example.com','password' => 'secret','is_admin' => 1 // 假设这是不希望通过用户输入直接赋值的字段
]);

由于 is_admin字段没有在 $fillable数组中指定,它不会被批量赋值,从而保证了数据的安全性。

$fillable与 $guarded

Laravel提供了另外一个与 $fillable对立的属性 $guarded。与 $fillable指定"哪些字段可以被批量赋值"不同,$guarded指定的是"哪些字段不可以被批量赋值"。

一般情况下,应该只使用其中一种方法来保护你的模型,要么是 $fillable,要么是 $guarded。使用两者中的一种,根据具体场景和个人偏好选择最适合你的项目的那个。

相关文章:

  • AI方案调研与实践二:模型训练
  • 【 大模型技术驱动智能网联汽车革命:关键技术解析与未来趋势】
  • PHP学习笔记(九)
  • 10大Python知识图谱开源项目全解析
  • 白杨SEO:做AI搜索优化的DeepSeek、豆包、Kimi、百度文心一言、腾讯元宝、通义、智谱、天工等AI生成内容信息采集主要来自哪?占比是多少?
  • Spring Boot 中修改 HTTP 响应状态码(即 `response.status`)可以通过以下几种方式实现
  • 新能源产业破局之道:达索 3DE(PLM)系统重构数据管理与工程变更效率
  • 什么是数据分析
  • 2025年 中青杯A题论文发布
  • Redis学习打卡-Day6-Redis 高可用(上)
  • linux debug技术
  • el-form 使用el-row el-col对齐 注意事项
  • 后端开发概念
  • 【MPC控制 - 从ACC到自动驾驶】车辆纵向动力学建模与离散化:MPC的“数字蓝图”
  • 微前端架构:从单体到模块化的前端新革命
  • 【C++】C++异步编程四剑客:future、async、promise和packaged_task详解
  • 使用 CodeBuddy 实现视频合并工具:解决本地视频处理痛点
  • 可增添功能的鼠标右键优化工具
  • LumaDot (亮度可调的屏幕圆点)
  • 【Linux仓库】权限的量子纠缠:用户/组/other如何编织Linux访问控制网?
  • 旅行社网站建设方案/在线培训系统平台
  • 凉山彝族自治州网站建站/友情链接多久有效果
  • 高校网站建设近期情况说明/网站搜索优化官网
  • 如何建立网络销售平台/百度优化点击软件
  • 社交网站 ui/在线推广企业网站的方法
  • 网站开发平台软件/销售管理系统