eloquent-Laravel-Как объединить 3 таблицы в Laravel? - PullRequest
0 голосов
/ 20 мая 2019

Как я могу получить некоторые данные из 3 таблиц, используя eloquent в laravel 5?У меня есть 3 стола, команда, доски, пользователь

модель команды:

public function member()
{
    return $this->belongsToMany(User::class)
                ->withPivot('status','user_role')
                ->withTimestamps();
}


public function boards()
{
    return $this->belongsToMany(Boards::class)->withTimestamps();;
}

модель доски

public function member()
{
    return $this->belongsToMany(User::class)
                ->withPivot('status','user_role')
                ->withTimestamps();
}

public function team()
{
    return $this->belongsToMany(Team::class)
                ->withTimestamps();
}

структура таблицы:

команда

id
team_name

Team_User (сводная таблица)

id
user_id
team_id

Доски

id
board_name

Boards_user (сводная таблица)

id
boards_id
user_id

Доски принадлежатв команду, и я хочу получить данные о досках, которые принадлежат команде (например, команда A), которая назначается как пользователю (например, user1), так и члену команды A. Как я могу это сделать?

1 Ответ

1 голос
/ 20 мая 2019

Согласно вашим последним комментариям:

  • Вам не нужно связывать User и Board напрямую. Доступ к этому можно получить из отношения многие-ко-многим из User m----m Team.
  • Доска принадлежит одной команде, команда может иметь много досок. Это отношение один ко многим : Team m-----1 Board

Итак, ваши таблицы должны быть структурированы следующим образом:

users
=====
    - id    
    - ...

teams
=====
    - id
    - team_name

team_user
=========
    - id
    - team_id
    - user_id
    - status
    - user_role

boards
======
    - id
    - team_id
    - board_name

Тогда ваши отношения:

User.php

public function teams()
{
    return $this
       ->belongToMany(Team::class)
       ->withPivot('status','user_role');
}

Team.php

public function members()
{
    return $this
       ->belongToMany(User::class)
       ->withPivot('status','user_role');
}

public function boards()
{
    return $this->hasMany(Board::class);
}

Board.php

public function team()
{
    return $this->belongsTo(Team::class);
}

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

$user_boards = User
                 ::find(1) // getting a User
                 ->teams() // accessing the Teams relationship
                 ->where('team_name', '=', 'My Team Name') // Constraining
                 ->first() // accessing the Team record
                 ->boards // getting the boards.

В дополнение к этому, вы можете добавить в модель пользователя ярлык для доступа к платам:

User.php

...

public function boardsOfTeam($teamName)
{
    return $this
       ->teams()
       ->where('team_name', '=', $teamName)
       ->first()
       ->boards;
}

Затем в вашем контроллере (или где вы хотите):

$user_boards = User::find(1)->boardsOfTeam('My Team Name');

Это совершенно необязательно, конечно.

...