首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel:仅当值出现在请求中时才编辑值?

在Laravel框架中,如果你想要在表单提交时仅更新那些实际被提交的字段,你可以使用$request->only()方法或者$fillable属性来实现这一需求。

基础概念

  • $request->only(): 这个方法允许你指定一个数组,其中包含了你想要从请求中提取的字段。只有这些字段会被包含在返回的集合中,其他的字段将被忽略。
  • $fillable: 这是一个模型属性,用于定义哪些字段可以通过批量赋值来填充。当你使用模型的createupdate方法时,只有在$fillable数组中列出的字段才会被更新。

优势

  • 数据保护: 通过限制可以更新的字段,可以防止恶意用户通过请求更新不应该被修改的数据。
  • 减少不必要的操作: 只更新有变化的字段可以减少数据库操作的次数,提高性能。

类型

  • 基于请求的方法: 使用$request->only()来选择性地获取请求中的字段。
  • 基于模型的方法: 在模型中使用$fillable属性来定义可批量赋值的字段。

应用场景

假设你有一个用户资料编辑页面,用户可以更新他们的名字和电子邮件。但是,如果用户没有提交某个字段,你不希望那个字段被数据库更新。

示例代码

代码语言:txt
复制
// 控制器方法
public function updateProfile(Request $request, User $user)
{
    // 只更新请求中提供的字段
    $user->update($request->only(['name', 'email']));

    return redirect()->back()->with('success', 'Profile updated successfully.');
}

或者,你可以在模型中定义$fillable属性:

代码语言:txt
复制
// User.php 模型
class User extends Authenticatable
{
    protected $fillable = [
        'name',
        'email',
        // 其他可填充字段
    ];
}

然后,在控制器中你可以直接使用模型的update方法:

代码语言:txt
复制
// 控制器方法
public function updateProfile(Request $request, User $user)
{
    // 使用模型的更新方法,只有fillable中定义的字段会被更新
    $user->update($request->all());

    return redirect()->back()->with('success', 'Profile updated successfully.');
}

遇到的问题及解决方法

如果你遇到了某些字段即使没有被提交也发生了更新的问题,可能是因为:

  • 没有正确使用$request->only(): 确保你只传递了需要更新的字段。
  • $fillable属性设置不当: 检查模型中的$fillable属性,确保它包含了所有允许更新的字段。

解决这些问题通常需要检查你的控制器逻辑和模型设置,确保它们正确地限制了更新的字段。

参考链接

通过上述方法和注意事项,你可以有效地控制Laravel应用中哪些字段应该在何时被更新。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 Laravel 这么优秀?

Laravel 用一个数组保存你注册过的所有路由;在进行路由匹配Laravel 会用你当前请求的 pathinfo 来匹配已经注册的所有路由;当你的路由数量超级多时,最坏情况下你需要 O(n) 次才能找出匹配的路由...,如下面的 secret 字段只有当用户是 admin 返回: public function toArray(Request $request): array { return [...如 Java 的 Spring 会在编译为 Sprint Container 填充不同的对象,在使用时就能向容器获取不同的。...不足 # Laravel 为人垢弊的问题就是太慢了,一个普通的应用一个 RTT 可能也要 100~200 ms;当遇到稍微大一点的并发请求,CPU 的负载就奔着 90% 去了。...Laravel 官方还推出了 Laravel Sail、Laravel Herd 还有更早之前推出现在被弃用的 Laravel Homestead 等本地开发环境工具;而部署工具 Laravel 推出了

22510
  • 30分钟用Laravel实现一个博客

    学习使用 seeds 的创建(Seeder)、编辑其他Seeder(在 run() 调用 factory() )、编辑DatabaseSeed(在 run() 调用 其他 Seeder)。...') }} => 我的博客 //注意这里有一个 config('app.name') 该函数其实是读取的 /.env 里的 APP_NAME ,且默认为 'Laravel' ,也就是说,你改 APP_NAME..._message') 编辑 BlogController 里的各种方法,在执行成功某些方法,页面重定向前,装载闪存。...我们学会了创建请求Request,并且在它的内部配置验证规则,在控制器层通过依赖注入的形式验证数据。...当然,我们还有 Request 请求认证 Policy 策略控制等等一些列的特性没有学习,我们也只使用了一次composer,其实在开发Laravel,我们还可以使用非常多的,支持Laravel的,完善的轮子可以利用

    7.4K00

    Laravel 表单方法伪造与 CSRF 攻击防护

    表单请求方法伪造 要告知 Laravel 当前提交的表单使用的是 GET/POST 之外的其他请求方式,需要在表单添加一个名为 _method 的隐藏字段,字段是「PUT」、「DELETE」或 「PATCH...Laravel 在处理提交表单请求,会将字段作为请求方式匹配对应的路由。...避免跨站请求伪造攻击的措施就是对写入操作采用非 GET 方式请求,同时在请求数据添加校验 Token 字段,Laravel 也是这么做的,这个 Token 会在渲染表单页面通过 Session 生成...,然后传入页面,在每次提交表单带上这个 Token 即可实现安全写入,因为第三方站点是不可能拿到这个 Token 的,所以由第三方站点提交的请求会被拒绝,从而避免 CSRF 攻击。...会在每次请求都检查请求头中是否包含 X-CSRF-TOKEN,并检查其是否和 Session 的 Token 是否一致。

    8.7K40

    PHP-FPM 性能配置优化

    相关配置:; FPM 启动创建的进程数,并且会一直保持这个数pm.max_children = 50; 每个进程最多处理多少个请求,超过此将自动销毁pm.max_requests = 1000pm.max_children...你可以把 1s 改成其他,如 10s。有了以上的设置,裁剪图像尺寸的方法、 网络 I/O 相关的一些请求都经常出现在 PHP 慢日志。你可以根据自己的情况来选择调整或者忽略。如何分析?...开启 OPcachePHP 7.2 FPM 的配置信息位于:/etc/php/7.2/fpm/php.ini编辑以上文件,搜索 opcache.enable 将设为 1 即为开启opcache.enable...然而,OPcache 是运行在 FPM 环境的,在命令行环境调用此函数无效。必须是一个可以通过 HTTP 访问到的脚本上来调用 opcache_reset() 行。无法在命令行执行。...在 laravel 中使用 OPcache ,可以直接使用 laravel-opcacheOPcache 是对 PHP 脚本的缓存,每次更改任何 PHP 代码你都需要清除缓存# 安装composer

    10100

    Laravel 5.0 之 表单验证类 (Form Requests)

    Laravel 执行数据检查和验证的新手段....除此之外还必须包含一个 authorize() 方法, 该方法返回一个布尔, 代表是否允许用户执行本次请求....Laravel 会在解析 POST 路由之前自动把用户输入的信息传递给相应的表单请求, 因此我们的所有验证逻辑都可以移到独立于控制器和模型之外的 FormRequest 对象....提交表单, 你可以看到我们并没有往控制器添加任何一行验证逻辑, 但是验证规则已经生效了. 其它用例 如果对 "新增" 和 "编辑" 有不同的规则, 或者根据不同的输入进行不同的验证, 要怎么办呢?...$dontFlash: 重定向不要传递的输入项的键 (默认: ['password', 'password_confirmation']).

    3.8K50

    Go 语言 Web 编程系列(一)—— 快速入门:创建第一个 Web 应用

    Laravel 的对比实现 如果与 PHP 应用类比的话,以 Laravel 框架为例,上述路由定义操作类似我们在 routes/web.php 定义一个这样一个首页路由: Route::get('/...): go run server.go 然后在浏览器请求 http://localhost:9091,页面显示如下: ?...服务端也会输出对应的请求日志: ? 然后我们在客户端请求带上参数信息: ? 此时,服务端就会打印对应的参数字段出来: ?...Laravel 的对比测试 如果要在基于 PHP Laravel 框架编写的测试应用中体验类似输出,需要先安装如下扩展包使得 dump 函数打印信息出现在服务端日志而不是渲染到客户端浏览器: composer...username=学院君&tutorial=Laravel从入门到精通教程&topic=Web编程,则 Dump Server 也会打印出详细的请求数据: ?

    1.2K20

    RuntimeException: Unable to boot ApiServiceProvider, configure an API domain or prefix 解决办法和原因所在

    原因所在 这其实是php的一个已知问题(只是对于我来说是未知 :p) 问题仅仅出现在php ts版本。下面是php手册对于putenv()函数的解释。 添加 setting 到服务器环境变量。...环境变量仅存活于当前请求期间。 在请求结束环境会恢复到初始状态。 设置特定的环境变量也有可能是一个潜在的安全漏洞。...当PHP是线程安全的时候,putenv()和getenv()存在一个问题:如果在一个请求结束之前调用另一个请求,那么当第一个脚本完成,它的环境变量将被重置。...这对于Ajax请求来说是有问题的,或者仅仅是当用户在新标签打开多个链接。 下面我以laravel为例重现此问题。...正常等待5s结果: 在第一次请求没有结束之前立刻再次请求的结果: ok,这就是为什么在学妹本地环境访问我的接口,会报错的原因,就是因为他ts版本的php没有找到env对应的

    51930

    CVE-2021-39165: 从一个Laravel SQL注入漏洞开始的Bug Bounty之旅

    经过验证,dev版本的代码可能有所差异(主要是后台getshell部分的POC利用链不一样),本文基于稳定版做审计。...但是可以想象一下,我的输入只要有一个key在this->searchable,那么这里的交集就可以取到至少一个,这个if语句就不会成立。...而且因为这个API接口是GET请求,所以无需用户权限,这是一个无限制的前台SQL注入。 Laravel的这个数组特性可以类比于6年前我第一次发现的ThinkPHP3系列SQL注入。...遗憾的是,Laravel的这个问题是出现在where()的第一个参数,官方并不认为这是框架的问题。 0x04 SQL注入利用 回到Cachet。...这个功能支持解析Twig模板语言: 对于Twig模板的解析是在API请求,用API创建或编辑Incident对象的时候会使用到Incident Templates,进而执行模板引擎。

    84120

    Go 语言 Web 编程系列(五)—— 基于 gorillamux 包实现路由匹配:进阶使用篇

    4、限定请求参数 接下来的几个路由匹配规则是 Laravel 不支持的,我们可以在 gorilla/mux 路由定义通过 Headers 方法设置请求头匹配,比如下面这个示例,请求头必须包含 X-Requested-With...并且为 XMLHttpRequest 可以访问指定路由 /request/header: r.HandleFunc("/request/header", func(w http.ResponseWriter...除了请求头之外,还可以通过 Queries 方法限定查询字符串,比如下面这个示例,查询字符串必须包含 token 且为 test 可以匹配到给定路由 /query/string: r.HandleFunc...在 Laravel ,可以通过中间件完成类似的功能,不过 gorilla/mux 可以更早地规避这种非法请求。...postRouter := r.PathPrefix("/posts").Host("admin.goweb.test").Subrouter() 这样一来,只有域名为 admin.goweb.test 可以访问对应路由

    3.2K20

    laravel 数据迁移与 Eloquent ORM的实现方法

    laravel 提供了很实用的 Eloquent ORM 模型类,简单、直观的与数据库进行交互。同时使用数据迁移管理数据库,可以与团队进行共享以及编辑。二者的更多介绍请查看下方的文档。...请勿将本示例带入实际项目中,本文作示例。实际项目根据需求进行记录,以及选择存储方式。 创建数据表 第一步当然是创建数据表了。使用 artisan 命令可以很方便的创建模型以及数据迁移。...当然 laravel 也提供了 访问器 & 修改器 方便维护。各位实际项目中自行选择。 定义中间件 定义一个全局中间件,每一次请求都会被执行。...将创建好的中间件添加到 app/Http/Kernel.php ,如下 ?...记录数据 最后在中间件,记录数据到数据库即可,代码如下 /** * Handle an incoming request.

    1K30

    Nginx+PHP(laravel) 环境 499 错误码排查过程小记

    前言 某公安项目过程,在内网服务器部署 WNMP 环境,运行 Laravel 框架代码,后查看日志发现某一刻突然所有请求 499,并持续一段时间,遂排查原因。...即:「客户端主动关闭连接」 但某一间段内全部请求均为返回 499,这显然不是所有客户端主动意识上的「关闭」,可能是因为客户端等待超时,自动关闭连接;加上 499 的时间段内包含部分 502,让我不得不怀疑...发现情况有所改善—— 499 错误已经由某一段大量、集中出现变为偶尔发生,且只出现在某几个特定 URI 请求上。 我决定对这几个 URI 对应的接口控制器代码进行检查。...于是修改代码,过程不再详叙,参见 Laravel 官方文档,或: Laravel 学习笔记之模型关联预加载 经过修改,在 Chrome 开发者工具内查看请求 Timing,缩短为原来时间的一半,800ms...(但此仍然不够理想,受到视图渲染、操作系统等原因的影响,后期继续优化,不属于本文讨论范围。)

    1.3K20

    【PHP】Largon 快速部署 Laravel 项目

    服务器Ngrok:安全的内网穿透利器(外网访问内网站点)Node.js:能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript 运行环境Notepad++:支持各种编程语言的文本编辑器...内核Kernel的主要工作:引导、处理请求、生命周期活动、获取实例。Laravel完成初始化工作。首先是进入到app.php文件:$app = require_once __DIR__.'/.....bindings instances aliases完成属性和初始化工作,框架初始化代码会继续调用 kernel 类的 handle 方法,传入一个 request 请求,request 请求继承了...SymfonyRequest,并调用了一个 capture 方法,之后返回的返回给 response 变量,因为内部比较逻辑复杂,整个流程基本到此为止。...>这样的代码块内可以生效。顺带放一手老外的吐槽:Damn! 15 years I've been working with PHP and I'm only seeing this now???

    3.1K20

    【译】使用默认方式更新service worker

    从Chrome 68开始,更新service worker脚本,HTTP缓存将被忽略,因此,68版本后的浏览器可以看到Web应用对其service worker脚本的请求频率增加,但importScripts...当值为imports,HTTP缓存将不会影响/service-worker.js的更新,但会影响service worker引入的脚本(在我们的例子是指path/to/import.js)。...当值为all,HTTP缓存将影响从顶级/service-worker.js脚本中发出的所有请求,包括引入的脚本,例如:path/to/import.js。...当值为none,HTTP缓存将不会影响从顶级/service-worker.js脚本中发出的所有请求,包括引入的脚本,例如假想的path/to/import.js。...(检查是使用HTTP缓存还是通过网络请求,者取决于updateViaCache的)。

    2.1K10

    掌握 Laravel 的测试方法

    不管你承认与否在研发一款产品,软件测试对项目而言意义重大,然而是测试通常被我们视而不见。这篇文章我们主要研究 Laravel 框架的测试方法。...我们通过请求的 id 参数,从 Post 模型查询一篇文章。...id=1 URI 的 GET 请求,并通过 $response 变量接收响应。 然后,我们去匹配请求响应的状态码是否为 200。在我们的测试用例的这个 GET 请求响应状态码应该是 200。...在 Laravel 项目中运行 PHPUnit 测试用例,需在项目更目录执行下面的命令。 $ phpunit 这个命令会运行项目中的所有测试用例。...本文涉及 PHPUnit 「单元测试」和「功能测试」的基础知识,工作我们还需要结合实际出发,对 PHPUnit 测试进行深入研究行。

    5.7K10

    深入剖析 Laravel 服务容器

    之前在 深度挖掘 Laravel 生命周期 一文,我们有去探究 Laravel 究竟是如何接收 HTTP 请求,又是如何生成响应并最终呈现给用户的工作原理。...提示:本文内容较长可能需要耗费较多的阅读时间,另外文中包含 Laravel 内核代码建议选择合适的 IDE 或文本编辑器进行源码阅读。...在讲解这些绑定方法前,先讲一个 Laravel 服务容器的使用场景。 管理待创建类的依赖 通过向服务容器绑定需要创建的类及其依赖,当需要使用这个类直接从服务容器解析出这个类的实例。...你为了使他们运行,就要给所有的外部变量一个一个写一些进去。这些的集合就叫上下文。 「编程什么是「Context(上下文)」?」 - vczh的回答。...值得指出的是在服务提供者的 register 方法,最好执行「绑定」操作。

    9K10

    深入浅出 Laravel 路由执行原理

    预备知识 通过之前 Laravel 内核解读文章我们知道在 Laravel ,所有的服务都是通过「服务提供者」的 register 方法绑定到「Laralvel 服务容器」, 之后可以在 Laravel...我想你自然的会想到:加载路由文件任务本质是一种服务,它实现的功能是将路由文件定义的路由加载到 Laravel 内核, 然后再去匹配正确的路由并处理 HTTP 请求。...所以,我们需要将目光集中到 RouteServiceProvider 的 boot 方法中就可以了,其实在它方法体只是去调用父类的 boot 方法完成服务启动处理。...运行给定路由,会处理中间件等处理(这里的中间件不同于 Kernel handle 的路由,是适用当前路由或路由组的局部路由)。...总结 在这篇文章我们主要学习一下几个有关路由处理的相关知识: Laravel 的路由如何被加载到项目中; 如何接收 HTTP 请求; 如何依据 HTTP 请求($request)查找所匹配的路由; 运行路由闭包或控制器方法

    6.8K30

    Laravel Ignition 功能全解析

    下面的截图是 Whoops,这是 Laravel 5 的标准。它比默认的 Symfony 好得多,可以显示堆栈跟踪和一些关于请求的信息。...尽管在 Laravel Whoops 是默认,但它是一个框架无关的(错误收集展示)。它仅仅显示通用信息。 ? 这是 Ignition 的截图,我们建立的新的错误视图。...如果您单击 stack trace选项卡右侧文件名旁边的铅笔图标,我们将在您喜欢的编辑自动打开该文件。默认情况下是 PhpStorm 。...您可以在 ignition配置文件中将其配置为您最喜欢的编辑器。 注意到右上角的那个小 “望远镜” 链接了吗?我们只会在您安装了 Laravel Telescope(第一方调试助手) 的情况下显示。...当用户点击Fix this for me 修复按钮,run函数将执行。 您可以将参数从异常发生的请求传递到将运行解决方案的请求。让 getRunParameters返回一个数组。

    3.1K40
    领券