我有一个 Employee 模型,该模型具有一个 Position 模型。 位置模型具有许多薪金模型关联:
员工被分配到一个“职位”(例如,软件开发人员) 一个职位有很多薪水,取决于多年的经验
该员工模型具有一个“经验”字段以指示经验的年份
我要考虑到该雇员的职位和工作年限,以获取该雇员的工资
我正在尝试类似的事情:
(在我的职位模型中):
public function salaryForExperienceYears($years)
{
return $this->hasOne(Salary::class)
->where('experience', $years)
->first()
->salary
;
}
(在我的控制器中,我想从中获取信息的地方):
$employee->position->salaryForExperienceYears(1);
如果我将“ 1”硬编码为数年,则在逻辑上可以正常工作。 但是我想利用这名员工的多年经验,而我做不到:
$employee->position->salaryForExperienceYears($employee->experience);
我应该怎么做?
即使我可以使用这种结构来做到这一点,也感觉有更好的方法……因为“经验”已经是$ employee中的财产了……
我对-> position有关系的方式相同,即使用$ employee中的position_id字段“约束”结果,感觉应该有一种方法也可以从这里“从上下文推断”经验字段(尽管这不是另一个表中的关系)
也许我应该使用其他类型的关系?
答案 0 :(得分:0)
使用leftJoin的薪金用于经验年份:
public function salaryForExperienceYears()
{
return $this->hasOne(Salary::class)
->where('experience', new Expression('years'))
->lefftJoin('employees', 'id', 'employees_id')
->first()
->salary
;
}
或
$position = $employee->position;
$selary = $position->salaryForExperienceYears($employee->experience);
答案 1 :(得分:0)
尝试一下:
$experience = $employee->experience;
$employee->position->salaryForExperienceYears($experience);