Laravel отношения путаница - PullRequest
       2

Laravel отношения путаница

0 голосов
/ 14 февраля 2019

В эти дни я изучаю Laravel и хочу создать несколько таблиц, моделей и прочего.

У меня есть компании, рабочие места и сотрудники.Если я правильно понял, публичные функции в файлах модели - это поля:

 public function jobs()
  {
    return $this->hasMany('App\Job');
  }

Означает ли это, что я могу создать еще одну функцию для currentJob, например:

 public function currentJob()
  {
    return $this->hasOne('App\Job');
  }

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Попробуйте увидеть это в English, чем в PHP, таким образом, вы сможете использовать правильные функции в нужных местах.

Таким образом, у вас есть 3 таблицы: компании, вакансии и сотрудники

Теперь, прежде чем приступить к изучению модели в Laravel, вам необходимо знать, каковы отношения между этими тремя таблицами.

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

Отношения между рабочими местами и сотрудниками один к одному, потому что одному сотруднику может быть назначена одна работа.

Теперь, в зависимости от вашего проекта, эти отношения могут отличаться, ноПервый шаг - установить отношения между тремя таблицами.

Теперь, предполагая, что у вас есть те же отношения, что я объяснил выше, ваши Модели будут иметь следующие «публичные» функции:

//Company Model

//this function will returns all the jobs associated with the specific company_id
public function jobs()
{
   return $this->hasMany('App\Job');
}

========

//Job Model

//this function will return the employee associated with the specific job_id
public function employee()
{
   return $this->hasOne('App\Employee');
}

//now you can also have a function to fetch the company to which the job "belongs to", this is a reverse case which means, the jobs table has "company_id"

public function company()
{
   return $this->belongsTo('App\Company');
}

И то же самое вы можете сделать в модели сотрудника, потому что каждый сотрудник принадлежит к работе, значит, есть job_id, так что вы будетеОтношение se принадлежит к:

//Employee Model

    //now you can also have a function to fetch the job to which the employee "belongs to", this is a reverse case which means, the employees table has "job_id"

    public function job()
    {
       return $this->belongsTo('App\Job');
    }

Следует отметить, что hasOne и serveTo являются функциями, которые являются аналогами друг друга.

Таким образом, если модель Job использует hasOne для Employee, Employee будет использовать ownTo для Job, учитывая, что в таблице employee в качестве внешнего ключа задан "job_id".Имеет значение только то, какую модель вы используете, исходя из того, что вы можете получить сведения о другой модели, используя эти функции.

Более подробную информацию, конечно, см. В официальной документации . Надеюсь, это поможет устранить вашу путаницу

0 голосов
/ 14 февраля 2019

Для базовых отношений модели:

// Job Model

public function employee(){
    return $this->belongsTo('App\Employee');

}

// Employee Model
public function jobs(){
   return $this->hasMany('App\Job');
}

Если вы хотите получить текущую работу, вы можете добавить добавленное свойство :

// Employee Model

protected $appends = ['current_job'];

//Then create function for  the same : 

public function getCurrentJob()
{
  return $this->jobs()->latest()->first();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...