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

Laravel中无ID参数方法重定向至带ID参数控制器页面问题

解决重定向到带ID参数的控制器页面问题

咱们先拆解下你遇到的核心问题:你的getComment方法想重定向到需要ID的comment页面,但目前有两个关键问题——一是getComment的路由没传递ID参数,导致方法里的$id根本拿不到有效值;二是重定向的写法不符合Laravel的规范。下面一步步来解决:

1. 先获取正确的ID值

你的POST路由ifa-dashboard/getComment没有定义{id}参数,所以控制器方法里的$id参数是无效的。得换个方式拿到目标ID:

  • 如果提交的表单里有隐藏字段(比如complaint_id),直接从请求中获取:
    $id = $request->input('complaint_id');
    
  • 如果只有ticket_no,就通过它去数据库查询对应的投诉ID:
    $complaint = Complaint::where('ticket_no', $request->input('ticket_no'))->first();
    $id = $complaint->id;
    

2. 使用Laravel推荐的重定向方式

Laravel里推荐用路由名称生成带参数的URL,你的comment路由已经命名为ifa.comment,这种方式既灵活又不容易出错:

修正后的getComment方法

public function getComment(Request $request) {
    $complain_id = $request->input('ticket_no');
    $user_name = $request->input('user_name');
    $comment = $request->input('comment');
    
    // 别忘了先保存评论!你之前的代码缺少这一步,评论无法存入数据库
    \DB::insert('INSERT INTO comments (comment, comment_by, complaint_id) VALUES (?, ?, ?)', [$comment, $user_name, $complain_id]);
    
    // 通过ticket_no获取对应的投诉ID
    $complaint = Complaint::where('ticket_no', $complain_id)->first();
    $id = $complaint->id;
    
    // 用路由名称重定向,并传入ID参数
    return redirect()->route('ifa.comment', ['id' => $id]);
}

3. 修正路由与控制器的参数匹配

你的POST路由getComment不需要{id}参数,所以控制器方法里要去掉$id参数,否则Laravel会因参数不匹配报错。路由保持原样即可:

Route::POST('ifa-dashboard/getComment','ComplainController@getComment');

额外的优化建议

  • 尽量避免直接写原生SQL,用Eloquent ORM更简洁安全,比如查询评论可以改成:
    $comment = Comment::whereIn('comment_by', ['Admin', $user_name])
        ->where('complaint_id', $tik)
        ->orderBy('id', 'desc')
        ->limit(2)
        ->get();
    
  • 你的comment方法里用get()加foreach的写法有问题:get()返回的是集合,如果你只需要单条数据,用first()更合适,否则foreach里的return会直接返回第一条数据,后续循环根本不会执行:
    $ticket = Complaint::where('id', $id)->select('ticket_no')->first();
    if ($ticket) {
        $tik = $ticket->ticket_no;
        // 上面的ORM查询评论逻辑
        return view('work.comment', compact('ticket', 'id', 'comment', 'user_name'));
    }
    // 处理找不到投诉的情况,给用户友好提示
    return redirect()->back()->with('error', '对应的投诉不存在');
    

内容的提问来源于stack exchange,提问作者SWARNADEEP PRAMANICK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:18:15