#laravel #eloquent
#laravel #красноречивый
Вопрос:
Я могу представить несколько способов сделать это, но я хочу убедиться, что я делаю все эффективно и оптимизированным для Laravel способом.
У меня есть пользователи и команды. Пользователи могут принадлежать ко многим командам, и, конечно, в команде может быть много пользователей. Типичное отношение «многие-ко-многим»:
class User extends Authenticatable
{
public function teams()
{
return $this->belongsToMany('AppTeam');
}
}
и,
class Team extends Model
{
public function users()
{
return $this->belongsToMany('AppUser');
}
}
Я также хочу, чтобы у каждого пользователя был «статус» в каждой команде. Например, «Активный» и «Неактивный».
Должен ли я создать третью таблицу / модель для «Статуса» и настроить сводные данные как для пользователей, так и для команд? Если да, то как мне использовать eloquent для эффективной выборки пользователей с заданным статусом для каждой команды?
Есть ли другой подход, который я должен рассмотреть?
Ответ №1:
Для многих-ко-многим вам, очевидно, требуется промежуточная таблица. team_user
будь что будет. И вы можете добавить status
столбец в эту таблицу.
team_id user_id status
1 1 Active
2 1 Inactive
....
Отношения:
public function teams()
{
return $this->belongsToMany('AppTeam')->withPivot('status');
}
public function users()
{
return $this->belongsToMany('AppUser')->withPivot('status');
}
И,
$users=User::with('teams')->get();
foreach($users as $user)
{
foreach($user->teams as $team)
{
echo $team->pivot->status;
}
}
Вот документ для работы со сводными таблицами
Комментарии:
1. Ах, спасибо, Санзиб. Я не знал, что могу добавить информацию о статусе в саму сводную таблицу. Я попробую это на следующий день и отчитаюсь.
2. Работает отлично. Спасибо!