【发布时间】:2021-11-25 19:55:08
【问题描述】:
我有以下表格:
表格
用户
- 身份证
- 电子邮件
组织
- 身份证
- 姓名
组织成员
- 身份证
- organisation_id(FK 到组织)
- user_id(FK 到用户)
- 角色
关系
- 用户与组织成员是一对多的关系。
- 组织成员与组织之间是多对一的关系
- 所以用户到组织成员是多对多关系,组织成员作为中间表。
雄辩的模型
模型如下:
Class User {
public function organisationMembers(): HasMany
{
return $this->hasMany(OrganisationMember::class);
}
public function organisations(): BelongsToMany
{
return $this->belongsToMany(Organisation::class, 'organisation_members')
->withPivot('role');;
}
}
class Organisation {
public function organisationMembers(): HasMany
{
return $this->hasMany(OrganisationMember::class);
}
public function users(): BelongsToMany
{
return $this->belongsToMany(Organisation::class, 'organisation_members')
->using(OrganisationMember::class);
}
}
class OrganisationMember {
public function organisation(): BelongsTo
{
return $this->belongsTo(Organisation::class)->withTrashed();
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
问题
对于以下代码:
$organisations = User::find($id)->organisations
当用户有组织时,它会按预期工作。
但是,当我对没有组织的用户执行此方法时,我得到的不是空集合,而是以下内容:
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'organisation_members.role' in 'field list'
(SQL: select `organisations`.*,
`organisation_members`.`user_id` as `pivot_user_id`,
`organisation_members`.`organisation_id` as `pivot_organisation_id`,
`organisation_members`.`role` as `pivot_role` from `organisations` inner join
`organisation_members` on `organisations`.`id` = `organisation_members`.`organisation_id`
where `organisation_members`.`user_id` = 109 and `organisations`.`deleted_at` is null)'
但是,如果我修改用户模型,并删除 pivot 部分:
Class User {
// ...
public function organisations(): BelongsToMany
{
return $this->belongsToMany(Organisation::class, 'organisation_members');
}
}
它按预期返回一个空集合。
我该如何解决这个问题?
【问题讨论】:
标签: php laravel eloquent laravel-8