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

Laravel中show方法无法获取关联习题的问题求助

解决无法获取技术关联习题数据的问题

以下是针对你的问题的排查和解决步骤:

  • 预加载关联数据
    你的控制器中没有预加载exercises关联,可能导致延迟加载时出现异常。修改控制器的show方法,使用**预加载(Eager Loading)**确保关联数据被正确查询:

    public function show(string $id)
    {
        $technology = Technology::with('exercises')->findOrFail($id);
        return view('home.technology.show', compact('technology'));
    }
    
  • 验证中间表数据
    即使关联关系定义正确,如果中间表exercise_technologies中没有对应technology_id和exercise_id的关联记录,也无法获取到习题。可以通过Artisan Tinker验证:

    php artisan tinker
    

    然后执行:

    DB::table('exercise_technologies')->where('technology_id', 你的技术ID)->get();
    

    如果返回空集合,说明需要向中间表添加关联记录。

  • 检查模型关联的键名匹配
    确认exercise_technologies表的外键字段名是否为technology_id和exercise_id。如果你的中间表使用了自定义外键名,需要在关联定义中明确指定:

    public function exercises()
    {
        return $this->belongsToMany(
            Exercise::class,
            'exercise_technologies',
            '自定义的technology外键名',
            '自定义的exercise外键名'
        );
    }
    
  • 调试查询语句
    开启Laravel查询日志,查看实际执行的SQL语句,确认关联查询是否正常执行:

    public function show(string $id)
    {
        DB::enableQueryLog();
        $technology = Technology::with('exercises')->findOrFail($id);
        dd(DB::getQueryLog()); // 打印所有执行的SQL
        return view('home.technology.show', compact('technology'));
    }
    

    检查输出的日志中是否包含查询exercises表和中间表的语句,以及WHERE条件是否正确匹配目标技术ID。

  • 检查Exercise模型的字段可见性
    确认Exercise模型中没有将name或其他必要字段加入$hidden属性,否则视图中无法获取这些字段的值(但这不会导致习题列表为空,只会显示空内容)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:43:24