Как запросить отношения, используя данные из модели в качестве условия? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть модель Сотрудник , которая имеет одну модель Должность .Модель Должность имеет много зарплат отношение модели:

Сотрудник назначен на «должность» (например, разработчик программного обеспечения).опыт работы

Модель сотрудника имеет поле "опыт", в котором указываются годы опыта

Я хочу получить зарплату для этого сотрудника с учетом его должности и многолетнего опыта работы

Я пытаюсь что-то вроде:

(в моей модели позиции):

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_id, доступное в $ employee, создается впечатление, что здесь должен быть способ, с помощью которого поле опыта также «выводится из контекста» (хотя это не отношение в другой таблице)

Может быть, я должен использовать какой-то другой тип отношений?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Попробуйте это:

$experience = $employee->experience;
$employee->position->salaryForExperienceYears($experience);
0 голосов
/ 17 апреля 2019

Использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...