Próbuję stworzyć twitter podobny do systemu follow / follow. Projekt stołu jest taki -

leader_id | following_id | is_mutual
        1 |            2 | 1 // Mutually follow each other
        2 |            1 | 1
        1 |            3 | 0 
        1 |            4 | 1
        4 |            1 | 1

Powiedzmy, że jestem user_id=4. Oglądam obserwujących user_id=1. Zobaczę listę -

2
3
4 -> me

Jak mogę określić, którego z tych użytkowników śledzę lub obserwuję? Chcę napisać w tym celu oświadczenie Laravel Eloquent. Nawet zapytanie MySQL pomogłoby mi znaleźć właściwy sposób, aby to zrobić.

0
TheBigK 19 grudzień 2019, 15:15
1
Niespójne dane? Spodziewałem się zobaczyć (1 | 4 | 1).
 – 
jarlh
19 grudzień 2019, 15:17
Zaktualizowano. Powinno być 1 | 4 | 1 .
 – 
TheBigK
19 grudzień 2019, 15:24
Czego spróbowałeś do tej pory? Gdzie utknąłeś?
 – 
Nico Haase
19 grudzień 2019, 15:31
Ponieważ podstawowy sql może wykonać tę pracę. np. wybierz follow_id jako obserwującego z obserwującego, gdzie lider_id = 1;
 – 
aviboy2006
19 grudzień 2019, 15:31
Skonfigurowałem relację należy do wielu. Jednak gdy przeglądam obserwujących innych osób, nie jestem w stanie znaleźć właściwego sposobu na znalezienie użytkowników, których obserwuję lub mnie obserwuję. Super utknął.
 – 
TheBigK
20 grudzień 2019, 10:02

1 odpowiedź

Nie poszedłbym w ten sposób.

Raczej mieć tabelę relacji jeden do wielu subskrypcji, na przykład

|subscriber  | subscribed_user_id 
---------------------------------
|1           | 2
|1           | 3
|2           | 3
|3           | 1

Lub nawet elastyczna lista zakodowana w formacie JSON

|subscriber  | subscribed_users
-------------------------------
|1           | {2,3}
|2           | {3}
|3           | {1}
0
Sakvojage 19 grudzień 2019, 15:35
Tak, mam związek jeden-do-wielu. Jednak prawdziwym problemem jest znalezienie moich obserwujących / użytkowników, których obserwuję w obserwujących innych osób. Nie mogę wymyślić żadnego sposobu na napisanie zapytania lub instrukcji bez uprzedniego pobrania do pamięci całej listy obserwujących innych osób, a następnie sprawdzenia ich jeden po drugim. System zawodzi, gdy lista obserwujących jest zbyt duża (powiedzmy 1 milion)
 – 
TheBigK
20 grudzień 2019, 10:05
To tylko odwrotne wyszukiwanie - SELECT subscriber FROM subscription_table WHERE subscribed_user_id = :my_user_id
 – 
Sakvojage
20 grudzień 2019, 16:15