Согласно вашим последним комментариям:
- Вам не нужно связывать
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');
Это совершенно необязательно, конечно.