Laravel 8: 自动填充当前登录用户 ID 到多行表单数据
技术百科
心靈之曲
发布时间:2026-01-27
浏览: 次 本文介绍如何在 laravel 8 中,于批量创建(addmore)场景下,自动将当前登录用户的 id 写入 `productstock` 模型的 `user_id` 字段,无需前端暴露或手动传参。
在 Laravel 8 中实现「自动写入当前用户 ID」的关键在于:服务端安全地获取认证用户身份,并在模型创建时注入 user_id 值。你当前的控制器逻辑中直接使用 $value 数组调用 ProductStock::create($value),但该数组不包含 user_id —— 这正是需要增强的地方。
✅ 正确做法:在 addMorePost 方法中注入 user_id
首先确保已引入 Auth 门面(Laravel 默认已配置):
use Illuminate\Support\Facades\Auth;
然后修改 addMorePost 方法中的循环逻辑,为每条记录显式添加 user_id:
public function addMorePost(Request $request)
{
$request->validate([
'addmore.*.name' => 'required|string|max:255',
'addmore.*.qty' => 'required|integer|min:1',
'addmore.*.price' => 'required|numeric|min:0.01',
]);
// 确保用户已登录,否则抛出异常或重定向登录页
$userId = Auth::id();
if (!$userId) {
return back()->withErrors(['auth' => '请先登录以提交数据。']);
}
foreach ($request->addmore as $value) {
// 合并 user_id 到每条记录数据中
$data = array_merge($value, ['user_id' => $userId]);
ProductStock::create($data);
}
return back()->with('success', '记录创建成功!');
}? 说明:array_merge($value, ['user_id' => $userId]) 确保即使前端未提交 user_id(也绝不应允许前端提交),数据库仍能准确关联到当前操作者,符合安全最佳实践。
⚠️ 注意事项与建议
-
模型需允许 user_id 批量赋值:检查 ProductStock 模型是否在 $fillable 数组中声明了 'user_id':
protected $fillable = ['name', 'qty', 'price', 'user_id'];
若未添加,create() 将忽略该字段,导致写入失败。
-
数据库字段命名规范:建议 user_id 字段为 unsignedBigInteger 类型,并添加外键约束(指向 users.id),提升数据完整性:
Schema:
:table('product_stocks', function (Blueprint $table) { $table->foreignId('user_id')->constrained()->onDelete('cascade'); });
避免前端伪造风险:切勿通过隐藏字段(如 )传递 user_id,这极易被篡改。始终由后端 Auth::id() 可信来源注入。
-
可选增强:使用事务保障一致性(尤其当批量插入量大时):
\DB::transaction(function () use ($request, $userId) { foreach ($request->addmore as $value) { ProductStock::create(array_merge($value, ['user_id' => $userId])); } });
通过以上改造,你即可在不修改前端 HTML/JS 的前提下,安全、静默、可靠地为每一条新增库存记录自动绑定当前登录用户,完全满足「不显示、必写入」的核心需求。
# ai
# 后端
# js
# 循环
# html
# red
# 前端
# cad
# laravel
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows10电脑怎么连接蓝牙设备_Win10
- Windows系统被恶意软件破坏后的恢复策略_错误
- Win10系统映像怎么恢复 Win10使用系统映像
- 如何使用Golang实现负载均衡_分发请求到多个服
- c++中如何使用std::variant_c++1
- Win11如何设置鼠标灵敏度_Win11鼠标灵敏度
- Win11怎么开启上帝模式_创建Windows 1
- Win11开机自检怎么关闭_跳过Win11开机磁盘
- mac怎么安装adb_MAC配置Android A
- 如何使用Golang开发简单的聊天室消息存储_Go
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- Python邮件系统自动化教程_批量发送解析与模板
- Win11怎么开启远程桌面_Win11系统远程桌面
- Win11怎么更改系统语言_Win11中文语言包下
- Windows10系统更新错误0x80070002
- LINUX下如何配置VLAN虚拟局域网_在LINU
- 如何使用Golang配置安全开发环境_防止敏感信息
- C++ STL算法库怎么用?C++常用算法函数(s
- Windows10系统怎么查看显卡驱动_Win10
- php修改数据怎么批量改状态_批量更新status
- 如何使用正则表达式精确匹配最多含一个换行符的 st
- 小程序里php怎么变mp4_小程序调用php生成m
- Python数据挖掘核心算法实践_聚类分类与特征工
- Python代码测试策略_质量保障解析【教程】
- Win11怎么更改电脑密码_Windows 11修
- php增删改查报错1054怎么办_字段名错误排查修
- Windows 11怎么更改锁屏超时时间_Wind
- 如何在 Go 中创建包含映射(map)的切片(sl
- Python字符串处理进阶_切片方法解析【指导】
- mac怎么查看wifi密码_MAC查看已连接WiF
- Win11怎么关闭触控板_Win11笔记本禁用触摸
- 如何在 ACF 中正确更新嵌套多层的 Group
- PHP主流架构怎么监控运行状态_工具推荐【操作】
- Win11怎么开启游戏工具栏_Windows11
- Windows10如何更改计算机工作组_Win10
- Win11怎么连接投影仪_Win11多显示器投屏设
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Windows10如何删除Windows.old_
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- Win11怎么关闭应用权限_Windows11相机
- 如何在Windows上设置闹钟和计时器_系统自带的
- 如何用列表一次性对 DataFrame 的指定列应
- Win10任务栏天气和资讯怎么关闭 Win10禁用
- mac怎么退出id_MAC退出iCloud账号与A
- 如何解决Windows时间不准的问题?(自动同步设
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- c# 在ASP.NET Core中管理和取消后台任
- Windows服务无法启动错误1067是什么_进程
- 如何解决同一段404代码在不同主机上表现不一致的问
- 如何使用Golang实现文件加密_Golang c


QQ客服