You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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做关联匹配,避免用户名重复、修改后匹配失效的问题:

  1. 先给ponto表新增user_id字段,和users表的id字段做外键关联
  2. 查询时直接用用户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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:10