Должен ли я использовать сводную таблицу с тремя путями и как получить с Eloquent - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь заставить мои модели Eloquent работать.Моя текущая база данных выглядит следующим образом:

enter image description here

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

access datatabase

Обратите внимание, что обе строки имеют одинаковые environment_id и project_id.

Вопрос 1: Хорошо ли разработана моя база данных?Или я должен был создать трехстороннюю сводную таблицу (id, project_id, environment_id, access_id)?

Вопрос 2: Как мне выбрать все среды, связанные с проектом, в моей модели Project?Прямо сейчас это выглядит так:

class Project extends Model
{    

    public function accesses(){
        return $this->hasMany('App\Models\Access', 'project_id');
    }


    public function environments(){
      // The missing part i can't get to work :(
    }

}

1 Ответ

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

Я бы посоветовал вам добавить отдельную таблицу для доступа, чтобы у вас не было дубликатов данных или проблем со сбросом пароля.
Если вы просто хотите, чтобы все среды были связаны с проектом, вы хотите много-многоили отношение один ко многим с опорой.

public function environments()
    {
     return $this->belongsToMany('environment', 'environment_project');
     // the first argument is the model you link to, the second the pivot table
    }

модели:

Environment: id, name

Project: id, name

Environment_project:id, environment_id, project_id, access_id

Access: id, username, password

редактирование, доступ в опоре

public function environments()
    {
     return $this->belongsToMany('environment', 'environment_project')->withPivot('username', 'password');
     //now you can do project::find(1)->environments->pivot->username
    }
...