Задать вопрос

Как работает HasMany в Yii2?

Ситуация такова:
Реализовую функционал "друзей" для пользователей.
Я имею 2 таблицы User, UserContact.
User
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),

UserContact
`u_id1` int(11) NOT NULL,
`u_id2` int(11) NOT NULL,
PRIMARY KEY (`u_id1`,`u_id2`),
KEY `fk_user_contact_user_2` (`u_id2`)

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

Как описать данную свзяь в Yii2?
На данный момент использую данный код, но он не правильный, поскольку поиск идет только по u_id2.
return $this->hasMany(User::className(), ['id' => 'u_id2'])->viaTable(
			UserContact::tableName(),
			['u_id1' => 'id'],
			function ($query) use ($status) {
				$query->where(['status' => $status]);
			}
		);

К примеру:
u_id1 = 1, u_id2 = 2, status = 0
Связь находит, но когда другой пользователь( c u_id2) заходит и начинает искать, по данному запросу, то ничего не находит поскольку ищет в u_id1 свой идентификатор.
Необходимо чтобы как u_id1 так и u_id2 могли найти себя в записи:
u_id1 = 1, u_id2 = 2, status = 0
  • Вопрос задан
  • 17196 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Flaker
@Flaker
Такой вариант:
// В модели User
public function getFriends()
    {
        return $this->hasMany(static::className(), ['id' => 'u_id1'])
            ->viaTable('{{%UserContact}}', ['u_id2' => 'id']);

    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
А почему не сводной таблицей объединять?
Ответ написан
Ваш ответ на вопрос

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

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