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

Laravel 如何通过users表外键food_id获取foods表对应列数据

实现步骤

第一步:在User模型中定义关联关系

找到app/Models/User.php文件,添加关联方法:

public function food()
{
    // 第一个参数是关联的Food模型类,第二个参数是users表的外键字段,第三个参数是foods表的关联主键
    return $this->belongsTo(Food::class, 'food_id', 'id');
}

第二步:修改控制器代码

你原有代码存在两处逻辑错误:

  • auth()->user()已经返回当前登录的用户实例,不需要再用User::find()重复查询
  • where语法使用错误,不需要额外查询获取food_id,直接通过关联关系就能拿到food表的对应数据
    正确的browseReserved方法写法:
public function browseReserved()
{
    // 直接获取当前登录用户,同时预加载关联的food数据,避免N+1查询问题
    $user = auth()->user()->load('food');
    
    // 将用户关联的food数据传给视图
    return view('你自己的视图路径', [
        'food' => $user->food
    ]);
}

第三步:视图层判断渲染

在blade视图文件中直接判断数据是否存在即可:

@if($food)
    <!-- 这里写存在food数据时要渲染的HTML块 -->
    <p>预约的食物名称:{{ $food->name }}</p>
    <!-- 其他food表字段直接通过$food->对应字段名调用即可 -->
@else
    <p>你还没有预约任何食物</p>
@endif

如果你的实际业务是一个用户可以关联多个food,需要调整表结构:把food_id从users表删除,在foods表新增user_id字段作为外键关联users表的id,再把User模型的关联方法修改为:

public function foods()
{
    return $this->hasMany(Food::class, 'user_id', 'id');
}

控制器获取数据改为$user->load('foods'),将foods集合传递到视图后循环遍历即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:48:04