Laravel二级pivot中间表下Card模型关联User返回null如何解决
问题原因
你的hasOneThrough关联参数顺序填写错误,Laravel中hasOneThrough6个参数的对应规则如下:
- 最终要获取的目标模型类
- 中间代理模型类
- 中间模型上和当前模型关联的外键(即中间模型中被当前模型外键指向的字段)
- 目标模型的主键字段
- 当前模型上指向中间模型的外键字段
- 中间模型上指向目标模型的外键字段
正确写法
按你的表结构,调整后的关联定义如下:
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
相关产品推荐
相关产品推荐

