Laravel中User模型如何定义关联organisations的嵌套关系方法
你这个是典型的多对多关联场景,Laravel 提供了belongsToMany关联类型直接适配这种通过中间表关联的结构,直接按下面的代码修改User模型的organisations方法即可:
use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Model { public function organisationMembers(): HasMany { return $this->hasMany(OrganisationMember::class); } public function organisations(): BelongsToMany { // 第一种写法:直接传入中间表模型类,外键符合Laravel默认规则的情况下不需要额外指定 return $this->belongsToMany(Organisation::class, OrganisationMember::class); // 也可以显式指定中间表名、关联外键,逻辑更清晰,避免因为模型命名不规范导致关联出错 // return $this->belongsToMany( // Organisation::class, // 'organisation_members', // 中间表名 // 'user_id', // 中间表里关联当前User模型的外键 // 'organisation_id' // 中间表里关联目标Organisation模型的外键 // ); } }
额外补充说明
- 后续如果中间表
organisation_members新增了其他业务字段(比如成员加入时间、成员角色等),可以在关联后追加withPivot方法读取中间表字段:return $this->belongsToMany(Organisation::class, OrganisationMember::class) ->withPivot('join_time', 'role'); - 你当前
Organisation模型里的关联方法存在大小写错误,需要修正:// 原代码里的organisationMember::class首字母没有大写,会导致类找不到 public function organisationMembers(): HasMany { return $this->hasMany(OrganisationMember::class); } // 也可以给Organisation模型加对应的users关联,方便反向查询组织下的所有用户 public function users(): BelongsToMany { return $this->belongsToMany(User::class, OrganisationMember::class); }
内容的提问来源于stack exchange,提问作者Yahya Uddin
相关产品推荐
相关产品推荐

