Laravel Eloquent同表多关联问题:caseworker关联未生效
你的Laravel关联问题解决方案
嘿,我一眼就发现问题所在了——你的caseworker关联关系用错了类型和参数,咱们来一步步修正:
1. 关联类型搞反了
rental_request表的caseworker字段存的是users表的ID,这说明每一条租赁请求都属于一个社工(也就是User模型),这种“属于”的关系应该用belongsTo,而不是你写的hasOne。
hasOne是用来表示“当前模型拥有另一个模型的一条记录”(比如一个User对应一个Profile),但这里的逻辑完全反过来,所以类型选错啦。
2. 参数顺序也不对(就算用hasOne也错了)
退一步说,就算你想用hasOne,参数顺序也搞反了:hasOne的第二个参数是关联表的外键,第三个是当前表的主键,你写的顺序刚好颠倒了。不过核心还是要换用正确的关联类型。
修正后的模型代码
把caseworker关联改成belongsTo,同时注意Laravel模型类名建议用大驼峰命名(规范问题):
class RentalRequest extends Model { protected $table = 'rental_request'; protected $fillable = ['user_id','address', 'number', 'kvm','rental','zip','city', 'caseworker']; public function user() { return $this->belongsTo('App\User', 'user_id'); } public function caseworker() { // 第二个参数是当前表的外键字段caseworker,关联users表的id(默认可以省略第三个参数) return $this->belongsTo('App\User', 'caseworker'); } }
3. 记得预加载关联数据
最后,你在控制器里获取数据的时候,如果想直接拿到关联的user和caseworker对象,一定要用预加载(不然会触发N+1查询,效率低),所以把查询改成这样:
RentalRequest::with(['user', 'caseworker']) ->orderBy('id', 'desc') ->get();
这样就能同时获取到user和caseworker的关联对象啦!
内容的提问来源于stack exchange,提问作者Marc Rasmussen
相关产品推荐
相关产品推荐

