Laravel关联模型获取完整数组问题:医生关联服务仅显示一条
问题解决方法
核心问题分析
你当前用belongsTo定义关联是错误的——belongsTo用于多对一/一对一场景(比如一个服务属于一个医生),而你的需求是一个医生拥有多个服务,这属于一对多关系,必须用hasMany。之前用hasMany数据为空,是因为没正确设置外键参数。
正确的关联定义
修改User模型中的services方法:
public function services() { // hasMany参数说明:关联模型类,关联表的外键,当前模型的主键 return $this->hasMany(Service::class, 'doctor_id', 'id'); }
Service::class:关联的目标模型类doctor_id:service表中指向User表的外键字段id:User表的主键字段(如果你的主键是默认的id,这个参数可以省略,Laravel会自动识别)
控制器代码无需修改
你的控制器查询逻辑是正确的,保持原样即可:
$doctors = User::with('reviews', 'services')->role('Doctor')->where('clinic_id', $id)->get();
错误原因说明
- 原
belongsTo(Service::class, 'id', 'doctor_id')的逻辑完全颠倒:它用User的id作为外键去关联Service的doctor_id,相当于把“医生拥有服务”搞成了“服务拥有医生”,所以批量查询时只会返回单条关联数据。 - 之前尝试
hasMany时数据为空,大概率是外键和主键的参数顺序搞混了,导致关联匹配失败。
内容的提问来源于stack exchange,提问作者Sharmae Reyes
相关产品推荐
相关产品推荐

