Laravel中$request->merge()与$request->mergeIfMissing()的区别是什么?
Laravel中$request->merge()和mergeIfMissing()的区别
核心区别
merge():不管请求里有没有目标键,都会直接添加或覆盖对应键值对。mergeIfMissing():只在请求里没有目标键的时候才添加键值对;如果键已经存在,完全不会改动原有值。
实际场景对比
举个例子,假设请求本身已经带了permission=premium参数:
- 用
merge()的情况:
$request->merge(['permission' => 'free']); // 最终$request->permission的值会变成'free',原有值被覆盖
- 用
mergeIfMissing()的情况:
$request->mergeIfMissing(['permission' => 'free']); // 因为请求里已经有'permission'这个键,所以不会做任何修改,值还是'premium'
你的测试结果一致的原因
你当前的测试请求里根本没有permission这个键,所以两种方法都会执行添加操作,结果当然一样。要看到差异很简单,在请求里预先带上permission参数(比如访问/test?permission=premium),再分别测试两个方法,就能马上看出区别。
内容的提问来源于stack exchange,提问作者John_Underscore
相关产品推荐
相关产品推荐

