如何在Laravel Eloquent中为同一数据表设置两个模型关联关系?
解决同一数据表的双向关联问题
问题诊断
你在Deal模型中定义belongsTo关联时参数顺序错误,导致框架无法识别关联字段。belongsTo的参数规则是:
- 关联模型类名
- 当前模型的外键字段(必填)
- 关联模型的主键字段(可选,默认是
id,可省略)
你之前传入null作为外键参数,这是核心错误。
正确的关联定义
Person模型(原有定义无需修改)
public function deals_seller() { return $this->hasMany(Deal::class, 'seller_person_id'); } public function deals_buyer() { return $this->hasMany(Deal::class, 'buyer_person_id'); }
Deal模型(修正关联参数)
public function seller() { // 第二个参数指定Deal表的外键seller_person_id return $this->belongsTo(Person::class, 'seller_person_id'); } public function buyer() { return $this->belongsTo(Person::class, 'buyer_person_id'); }
验证关联
另外注意你的查询语句存在语法错误,修正后即可正常获取关联数据:
// 正确的where条件写法,同时with可以传入多个关联名称 $deals = Deal::where('amount', '>', 100)->with('buyer', 'seller')->get();
执行上述代码后,就能拿到金额大于100的交易记录,以及对应的买家、卖家信息。
内容的提问来源于stack exchange,提问作者Bill200
相关产品推荐
相关产品推荐

