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

Laravel二级pivot中间表下Card模型关联User返回null如何解决

问题原因

你的hasOneThrough关联参数顺序填写错误,Laravel中hasOneThrough6个参数的对应规则如下:

  1. 最终要获取的目标模型类
  2. 中间代理模型类
  3. 中间模型上和当前模型关联的外键(即中间模型中被当前模型外键指向的字段)
  4. 目标模型的主键字段
  5. 当前模型上指向中间模型的外键字段
  6. 中间模型上指向目标模型的外键字段

正确写法

按你的表结构,调整后的关联定义如下:

class Card extends Model
{
    use HasFactory;

    protected $table = 'cards';
    public $primaryKey = 'id';
    public $incrementing = true;

    public function user()
    {
        return $this->hasOneThrough(
            User::class,
            CompanyUser::class,
            'id', // 中间表CompanyUser的主键,被cards.company_user_id关联
            'uuid', // 目标表User的主键,被companies_users.user_uuid关联
            'company_user_id', // 当前Card表关联中间表的外键
            'user_uuid' // 中间表关联User表的外键
        );
    }

}

补充注意项

请确认你的中间模型CompanyUser是否正确指定了对应表名,默认Laravel会将驼峰形式的模型名按复数蛇形匹配表名,如果你的CompanyUser模型没有显式指定protected $table = 'companies_users',也会导致关联查询失败。

内容的提问来源于stack exchange,提问作者Lambasoft

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:36:02