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

Laravel8项目中如何通过id获取单行数据并解决外键查询异常问题

问题根因

  • 原有路由view-beat/{beat_slug}/{license_slug}会传递2个路径参数,但初始viewlicense方法仅定义了1个$id参数,实际拿到的$id仅为第一个路径参数beat_slug,完全没有使用第二个路径参数license_slug做License数据筛选
  • 初始License查询逻辑License::where('beat_id', $id)->first()永远只会取对应beat下的第一条License记录,和实际访问的license参数无关,所以出现不同license路径展示同一条数据的问题

调整后代码逻辑说明

调整后的代码已经修复了上述问题:

  • viewlicense方法正确接收两个路径参数$beat_slug和$license_slug,先校验对应beat是否存在,再通过license_slug精准查询匹配的单条License数据,保证路径参数和返回数据一一对应
  • viewbeat方法中使用get()获取对应beat下的所有License列表,符合License列表页的展示需求

可选优化建议

可以给License查询额外增加beat_id筛选条件,避免不同beat下出现重复license_slug时查询错误,同时减少重复查询次数:

public function viewlicense($beat_slug, $license_slug)
{
    $beat = Beat::where('slug', $beat_slug)->first();
    if (!$beat) {
        return redirect('/')->with('Status', "No such beat found");
    }
    // 同时按beat_id和license_slug筛选,数据更准确
    $licenses = License::where('slug', $license_slug)->where('beat_id', $beat->id)->first();
    if (!$licenses) {
        return redirect('/')->with('Status', "The link was broken");
    }
    return view('frontend.licenses.view', compact('licenses'));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:03