【发布时间】:2020-08-13 12:37:42
【问题描述】:
这就是我想要实现的,我们有员工,每个员工可以有一个部门的职位,一个部门的一个职务和多个多个部门的额外费用,每个部门一个额外费用。我想将所有职责存储在staff_responsibilities 表中
我有一个staff 表,其中包含以下列
- 身份证
- 姓名
- 电子邮件
然后我有staff_responsibilities 包含以下列的表:
- staff_id
- designation_id
- department_id
- responsibility_type_id
职责类型可以是Position 和Additional Charge,并且一名员工可以拥有多个Additional Charge 职责。
然后我有一个responsibility_types 表,其中包含以下列:
- 身份证
- 姓名
// I have no way to tell this relationship to look for a responsibility type 2 (2 is the id of the responsibility called `Designation`)
public function designation()
{
return $this->hasOne(StaffResponsibility::class);
}
// I have no way to tell this relationship to look for a responsibility type 2
public function position()
{
return $this->hasOne(StaffResponsibility::class);
}
// Gives error: Syntax error or access violation: 1066 Not unique table/alias: 'staff_responsibilities'
public function additionalCharges()
{
return $this->belongsToMany(StaffResponsibility::class, 'staff_responsibilities','designation_id');
}
任何帮助将不胜感激。
员工职责表
责任类型表
名称表
【问题讨论】:
-
我不明白你为什么要使用 compoships 包。看起来像正常的 hasOne、HasMany 和 ManyToMany 关系。
-
看起来一切正常。你有什么问题?
-
问题是它没有按我的意愿工作。这就是我想要的:当我执行 $staff->position 时,它应该返回第一个具有 responsibility_type_id 1(位置)的职责,而当我执行 $staff->designation 时,它应该返回第一个具有response_type_id 2(指定)的职责现在当我调用 $staff->position 或 $staff->designation 时,我无法告诉我的关系寻找特定的 responsibility_type_id。他们只返回与responsibility_id 和staff_id 匹配的第一条记录
标签: laravel eloquent many-to-many relationship