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
相关产品推荐
相关产品推荐

