Путаница в отношениях Laravel

Сейчас я изучаю Laravel и хочу создать таблицы, модели и прочее.

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

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

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

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

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

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

Inzamam Idrees 14.02.2019 11:29

@merko Проверьте документы

kellymandem 14.02.2019 11:34

на самом деле Laravel не может вам помочь, если вы не понимаете основы отношений с базой данных, вы должны сначала изучить это.

Kyaw Kyaw Soe 14.02.2019 12:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
438
2

Ответы 2

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

// 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(), и это имеет смысл для вас, ребята? для меня это кажется более запутанным и неправильным, но все еще не отрицательным :) может быть, другие знают лучше

Abhay Maurya 14.02.2019 14:24

Вы исправили свой ответ, молодец, по крайней мере, вы могли бы сказать спасибо :)

Abhay Maurya 15.02.2019 08:19

Спасибо, чувак, моя ошибка, я исправил это с мобильного, как только понял, что напортачил, когда писал это.

Mihir Bhende 15.02.2019 12:06

все нормально без проблем :)

Abhay Maurya 15.02.2019 13:10

Попробуйте увидеть это в 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, которые ссылаются на модель работы?

merko 14.02.2019 13:20

подумай, что вернут currentJob и previousJobs? чего ты хочешь этим добиться?

Abhay Maurya 14.02.2019 14:23

Я хочу, чтобы текущая работа была отделена от предыдущих. Кроме того, как бы я использовал модель работы только в качестве справки, я не хочу передавать туда идентификатор компании, я пробовал, но он ищет идентификатор компании.

merko 14.02.2019 20:22

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

Abhay Maurya 15.02.2019 08:22

Другие вопросы по теме