Laravel8.x中Parties双字段关联People/Companies查询返回null问题求解
Laravel关联配置错误修复方案
错误原因
- 反向关联字段对应错误:
People、Companies表本身不存在party_details_id字段,你在反向关联配置中错误指定该字段为外键,导致Laravel无法匹配关联条件,最终生成0=1的恒假查询条件。 belongsTo参数顺序错误:Laravel中belongsTo方法的参数顺序为(关联模型类, 当前模型的关联字段, 关联模型的目标字段),你配置的参数顺序完全颠倒。- 关联类型不合理:Parties表与Companies表为一对一关联(联合键唯一),原配置用
hasMany不符合业务逻辑。
正确配置代码
Parties 模型
// 关联个人主体 public function people() { return $this->hasOne(People::class, 'id', 'party_details_id') ->where('party_type', 'P'); } // 关联企业主体,改为一对一关联,方法名调整为单数更符合语义 public function company() { return $this->hasOne(Companies::class, 'id', 'party_details_id') ->where('party_type', 'C'); }
People 模型
public function party() { // 当前模型People的关联字段为id,对应Parties表的party_details_id字段 return $this->belongsTo(Parties::class, 'id', 'party_details_id') ->where('party_type', 'P'); }
Companies 模型
public function party() { // 当前模型Companies的关联字段为id,对应Parties表的party_details_id字段 return $this->belongsTo(Parties::class, 'id', 'party_details_id') ->where('party_type', 'C'); }
测试路由优化
Route::get('/people', function () { return People::with('party')->get()->toArray(); });
内容的提问来源于stack exchange,提问作者Steve Aged
相关产品推荐
相关产品推荐

