Сейчас я изучаю Laravel и хочу создать таблицы, модели и прочее.
У меня есть компании, рабочие места и сотрудники. Если я правильно понял, публичными функциями в файлах моделей являются поля:
public function jobs()
{
return $this->hasMany('App\Job');
}
Означает ли это, что я могу создать другую функцию для currentJob вот так:
public function currentJob()
{
return $this->hasOne('App\Job');
}
Кроме того, мне нужно добавить belongsTo для каждого отношения? Например, в пользовательской модели?
@merko Проверьте документы
на самом деле Laravel не может вам помочь, если вы не понимаете основы отношений с базой данных, вы должны сначала изучить это.






Для базовых отношений модели:
// 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();
}
Этот ответ получил одобрение, что странно, потому что он показывает, что возвращает приложение \ задание из модели задания, когда имя функции — сотрудник, поэтому в основном, когда вы вызываете сотрудника () из контроллера, он возвращает задания? :) то же самое и с функцией job(), и это имеет смысл для вас, ребята? для меня это кажется более запутанным и неправильным, но все еще не отрицательным :) может быть, другие знают лучше
Вы исправили свой ответ, молодец, по крайней мере, вы могли бы сказать спасибо :)
Спасибо, чувак, моя ошибка, я исправил это с мобильного, как только понял, что напортачил, когда писал это.
все нормально без проблем :)
Попробуйте увидеть это в 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, поэтому вы будете использовать отношение принадлежности к:
//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 и ownTo являются аналогами друг друга.
Таким образом, если модель Job использует hasOne для Employee, Employee будет использовать ownTo для Job, учитывая, что таблица сотрудников имеет «job_id» в качестве внешнего ключа. Важно только то, какую модель вы используете, на основе которой вы можете получить информацию о другой модели, используя эти функции.
Для получения более подробной информации, конечно же, обратитесь к официальная документация. Я надеюсь, что это поможет прояснить ваше замешательство
Могу ли я иметь несколько полей, таких как currentJob и previousJobs, которые ссылаются на модель работы?
подумай, что вернут currentJob и previousJobs? чего ты хочешь этим добиться?
Я хочу, чтобы текущая работа была отделена от предыдущих. Кроме того, как бы я использовал модель работы только в качестве справки, я не хочу передавать туда идентификатор компании, я пробовал, но он ищет идентификатор компании.
У вас не может быть отношений без внешнего ключа, это базовое понимание базы данных. Вы можете сделать любую функцию, которая вам нравится, в любой модели и заставить ее делать все, что вы хотите, но это не будет подпадать под категорию вопроса об отношениях Laravel, поэтому, пожалуйста, задавайте его отдельно. Вопрос, в котором вы четко указываете свою цель и что вы пытались для ее достижения, иначе люди спутают ваш пост с непониманием отношений laravel.
если вы хотите, чтобы пользователь выполнял какую-либо работу, вам нужно добавить отношения
belongsToв пользовательскую модель.