Как получить не взаимные подписки?

Ссылка скопирована
1 ответ

Значит есть у меня 2 таблицы:

User followers | OneToMany | mappedBy="followed" following | OneToMany | mappedBy="follower"  Follow followed | ManyToOne | inversedBy="followers" follower | ManyToOne | inversedBy="following"

User followers | OneToMany | mappedBy="followed" following | OneToMany | mappedBy="follower" Follow followed | ManyToOne | inversedBy="followers" follower | ManyToOne | inversedBy="following"

Получаю подписчики пользователя таким образом:

$qb ->join('u.following', 'follow')     ->where('follow.followed = :user')     ->setParameter('user', $user)

$qb ->join('u.following', 'follow') ->where('follow.followed = :user') ->setParameter('user', $user)

Подписки таким:

$qb ->join('u.followers', 'follow')     ->where('follow.follower = :user')     ->setParameter('user', $user)

$qb ->join('u.followers', 'follow') ->where('follow.follower = :user') ->setParameter('user', $user)

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

$qb ->join('u.followers', 'fs')     ->join('u.following','fg')     ->where('fs.follower = :user')     ->andWhere('fg.followed = :user')     ->setParameter('user', $user)

$qb ->join('u.followers', 'fs') ->join('u.following','fg') ->where('fs.follower = :user') ->andWhere('fg.followed = :user') ->setParameter('user', $user)

По моим надеждам where('fg.followed != :user') должно было как раз вывести не взаимные, но на практике вообще ничего не выводится. Возможно это глупая ошибка, но с БД у меня вечная война, надеюсь на помощь.

Спасибо,

Дополнительно:

Ответы:

Не работает, потому что у вас сам запрос на взаимные подписки кривой, и вы плохо понимаете, как работает join. Проблема у вас во 2-ом join. Расписывать лень, поэтому кратко.
У вас в результат всех join получается таблица в которой у пользователя каждый follower сопоставляется с following. Из такой кучи данных выбрать не взаимные подписки просто невозможно.
2-ым запросов вам нужно join-ить не всех following-ов, а только тех у кого followed = fs.follower. Причем использовать left join и проверять потом в where на null.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для того чтобы получить не взаимные подписки на сайте, вы можете использовать следующий подход:

1. Очистите куки и кэш браузера: Иногда подписки могут быть взаимными из-за сохраненных данных в куки и кэше браузера. Попробуйте очистить их и затем повторно подписаться на необходимый контент.

2. Отмена подписки: Если вы уже подписаны на какой-то контент, отмените подписку, чтобы избежать получения уведомлений о новых сообщениях или обновлениях.

3. Настройки уведомлений: Проверьте настройки уведомлений на сайте. Возможно, вы случайно разрешили получать уведомления о подписках.

4. Используйте инкогнито-режим: Попробуйте открыть сайт в режиме инкогнито или приватном режиме браузера. В этом режиме данные о ваших предыдущих действиях не сохраняются, что может помочь избежать проблем с взаимными подписками.

5. Обратитесь в службу поддержки: Если проблема с подписками остается нерешенной, рекомендуется обратиться в службу поддержки сайта для получения дополнительной помощи и разъяснений.

Применяя вышеперечисленные методы, вы сможете избежать взаимных подписок и наслаждаться контентом сайта без лишних уведомлений.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно