@maxyc_webber
Web-программист

Yii2 Relations: Запутался. Простой релейшен на саму себя. Поможете?

Есть модель пользователей системы. Каждый пользователь с соответствующим статусом может собрать команду из таких же пользователей. Задача то вроде простая. И вот что-то я запутался в релейшенах.
На текущий момент есть 2 реализации не работающие:
1. модель User и кросстаблица users_teams (team_id, user_id) team_id это id пользователя владельца и user_id это id пользователя, в т.ч. и владелец команды.
Этот вариант вроде и запустился с владельцем, но выбрав участника, у него команды уже нет.

2. Модель User и поле в модели team_id
так же не работает.
  • Вопрос задан
  • 422 просмотра
Решения вопроса 2
igorbelikov
@igorbelikov
Fullstack Developer
Если правильно понял, то кажется должно быть примерно так.

Пользователи
// Таблица
// user
// id | name

// Модель
class User {
  public function getTeam() {
      return $this->hasOne(UserTeam::className(), ['id' => 'user_id']);
  }
}


Команды
// Таблица
// team
// id | name

// Модель
class Team
{
  public function getUsers() {
      return $this->hasMany(UserTeam::className(), ['id' => 'user_id']);
  }
}


Кросстаблица
// Таблица
// user_team
// id | team_id | user_id

// Модель
class UserTeam {
  public function getUser() {
      return $this->hasOne(User::className(), ['id' => 'user_id']);
  }
  public function getTeam() {
      return $this->hasOne(Team::className(), ['id' => 'team_id']);
  }
}
Ответ написан
Комментировать
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Вроде первый вариант должен работать, т.к. у вас связи many2many. Т.е. сама сущность User, и референсная таблица, как вы и написали. Смотрите внимательнее, может вы что-то напутали, к примеру в viaTable().

Реализовывал подобным образом многоуровневое меню, когда связь сущности MenuItem замыкалась на себе. Потом правда отказался от подобной реализации
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы