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

Laravel:如何在store方法获取用户ID并发布评论?代码无法捕获会话用户ID

在Laravel的store方法中获取用户ID并关联评论的解决方案

我看了你这段代码,问题主要出在用户实例的获取方式和评论关联保存的逻辑上,咱们一步步来修正:

首先,你没必要单独通过User::find(\Auth::id())去查询用户——Laravel的Auth::user()已经直接返回了当前登录用户的实例,既省了一次数据库查询,也更可靠。

其次,你的代码里没有把评论和用户、地点做关联绑定,所以数据库里的外键(user_id和place_id)自然不会被填充。

修正后的完整代码

public function store(Request $request, $place_id) {
    // 1. 先验证请求数据,确保必填字段存在且合法
    $validated = $request->validate([
        'review' => 'required|string',
        'rating' => 'required|integer|min:1|max:5', // 可根据你的评分范围调整规则
    ]);

    // 2. 确保用户已登录(如果路由没加auth中间件的话)
    if (!auth()->check()) {
        return redirect()->route('login')->with('error', '请先登录再发表评论');
    }

    // 3. 获取当前登录用户实例
    $user = auth()->user();

    // 4. 查找对应的地点,找不到直接返回404
    $place = Place::findOrFail($place_id);

    // 5. 创建评论并关联用户和地点(推荐使用关联关系创建)
    $review = $user->reviews()->create([
        'place_id' => $place->id,
        'review' => $validated['review'],
        'rating' => $validated['rating'],
    ]);

    // 也可以用直接设置外键的方式:
    // $review = new Review($validated);
    // $review->user_id = $user->id;
    // $review->place_id = $place->id;
    // $review->save();

    // 6. 跳转回原页面并提示成功
    return redirect()->back()->with('success', '评论发表成功!');
}

关键要点补充

  • 路由中间件:记得给这个路由加上auth中间件,这样未登录用户根本访问不到这个方法,省掉代码里的登录判断。比如在routes/web.php里:
    Route::post('/places/{place_id}/reviews', [ReviewController::class, 'store'])->middleware('auth');
    
  • 模型关联定义:要确保你的三个模型都定义了正确的关联关系:
    • 在User.php中:
      public function reviews() {
          return $this->hasMany(Review::class);
      }
      
    • 在Place.php中:
      public function reviews() {
          return $this->hasMany(Review::class);
      }
      
    • 在Review.php中:
      public function user() {
          return $this->belongsTo(User::class);
      }
      
      public function place() {
          return $this->belongsTo(Place::class);
      }
      
  • findOrFail的优势:相比find,如果找不到对应的地点,findOrFail会直接返回404响应,不用手动处理不存在的情况。

这样修改后,评论就能正确关联到当前登录用户和对应的地点,数据库里的user_id和place_id外键也会被正确填充啦。

内容的提问来源于stack exchange,提问作者Z.Cale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:42