Как в Laravel сделать 2 отношения к одной и той же таблице? - PullRequest
0 голосов
/ 30 октября 2018

Возникли проблемы с отношениями в Ларавеле, я не уверен, что есть какие-то решения, но надеюсь, что вы, ребята, поможете мне. Итак, предположим, что у меня есть 2 таблицы ПОЛЬЗОВАТЕЛИ и ТРЕНИРОВКИ . ПОЛЬЗОВАТЕЛЕЙ можно считать компанией, администратором, инструктором в зависимости от поля роль . Об отношениях У ПОЛЬЗОВАТЕЛЯ как компании может быть много ТРЕНЕРОВ, но также как у инструкторов может быть много ТРЕНЕРОВ. Так в таком случае, как я могу построить отношения между ними? В таблице TRAINEES должны быть поля COMPANY_ID и INSTRUCTOR_ID ? или как? Но это же таблица ПОЛЬЗОВАТЕЛИ . Я не знаю, ясно ли это для вас. Просто спросите меня. Положитесь на вас, ребята

1 Ответ

0 голосов
/ 30 октября 2018

Составьте таблицы пользователей и обучаемых следующим образом:

столбцы / поля таблицы пользователей:

  • id (первичный ключ)
  • имя пользователя (строка)
  • роль (строка, индекс)

столбцы / поля таблицы обучаемых:

  • id (первичный ключ)
  • имя (строка)
  • trainer_id (целое число, индекс)
  • company_id (целое число, индекс)

Затем в вашей модели стажеров сделайте следующее:

public function trainer()
    {
        return $this->belongsTo('App\User', 'trainer_id');
    }

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

В вашей Пользовательской модели выполните следующие действия:

public function trainees()
    {
        if($this->attributes["role"] == "company")
            return $this->companyTrainees();
        if($this->attributes["role"] == "instructor")
            return $this->instructorTrainees();
        return array();
    }

public function companyTrainees()
    {
        return $this->hasMany('App\Trainee', 'trainer_id');
    }

public function instructorTrainees()
    {
        return $this->hasMany('App\Trainee', 'company_id');
    }

Используйте эти отношения в ваших контроллерах и других местах. Это не проверено, но оно не должно быть слишком глючным. Не забудьте заполнить базу данных действительными данными, особенно для идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...