Laravel控制器如何通过Auth认证用户自动过滤MySQL的ponto表数据
问题修正方案
你现有代码存在两个核心问题:
- 认证信息获取方式错误:Laravel 中不存在
Auth::name()的调用方法,要获取当前登录用户的名称,需要先通过Auth::user()获取登录用户实例,再读取对应的name属性 - 不必要的关联预加载:
with()方法是用来预加载Eloquent模型的关联关系的,你ponto表中的name是直接存储的字段,并非关联其他表的关系,所以with('name')属于错误调用,需要删除
直接可用的修正代码
// 执行查询,过滤当前登录用户对应的ponto表数据 $lista = Ponto::where('name', Auth::user()->name)->get();
优化建议
更推荐的方案是通过用户ID做关联匹配,避免用户名重复、修改后匹配失效的问题:
- 先给
ponto表新增user_id字段,和users表的id字段做外键关联- 查询时直接用用户ID过滤,代码更稳定高效:
$lista = Ponto::where('user_id', Auth::id())->get();
如果需要兼容用户未登录的场景,避免调用Auth::user()时报错,可以加登录状态判断:
if (Auth::check()) { $lista = Ponto::where('name', Auth::user()->name)->get(); } else { // 未登录时自定义逻辑,比如返回空集合 $lista = collect(); }
内容的提问来源于stack exchange,提问作者Robison F Santos
相关产品推荐
相关产品推荐

