You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Eloquent中为同一数据表设置两个模型关联关系?

解决同一数据表的双向关联问题

问题诊断

你在Deal模型中定义belongsTo关联时参数顺序错误,导致框架无法识别关联字段。belongsTo的参数规则是:

  1. 关联模型类名
  2. 当前模型的外键字段(必填)
  3. 关联模型的主键字段(可选,默认是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:06:33