___ qstntxt ___
Was ist der beste Weg, um eine Freundschaftsbeziehung mit beredten zu modellieren? Mein Tabellenschema ist unten und ich möchte eine Beziehung definieren, in der ich alle Freunde wie folgt abrufen könnte.
%Vor%
Die obige Beziehung funktioniert fast, wenn ich nach Freunden mit der Benutzer-ID 3 suche. Ich bekomme die Benutzer 1 und 3, aber natürlich will ich 1 und 2.
Freundschaftstisch
user_id: Die Benutzer-ID, die die Freundschaft angefordert hat
friend_id: Die Benutzer-ID des anvisierten Freundes
state: Ob die Freundschaft ansteht, akzeptiert oder blockiert ist.
created_at und updated_at
Ich bin mir bewusst, dass es Lösungen von Laravel Viele bis viele selbst-referenzierende Tabellen funktionieren nur in einer Richtung , wo ich die Freunde von beiden Seiten der Beziehung abrufen kann, aber ich muss zwei Zeilen haben, zum Beispiel wenn Benutzer 1 und 3 Freunde sind, dann in einer Zeile user_id = 3 und friend_id = 1, und in der nächsten Reihe umgekehrt. (Oder wenn ich nicht zwei Zeilen habe, muss ich zwei Abfragen durchführen).
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde.
___ tag123orm ___ Objektrelationales Mapping (ORM) ist eine Technik, um objektorientierte Systeme auf relationale Datenbanken abzubilden.
___ answer17907150 ___
Ich habe einen Vorschlag, dass Sie Bedingungen verwenden, um die gewünschten values zu laden
-
In diesem Beispiel nehmen wir an, dass Sie die Abfrage verwendet haben, um user_id und fiend_id mit der Bedingung
zu laden
"Wählen Sie * von frienddship WHERE user_ID = '$ id' ODER friend_ID = '$ id'"
$ id: ist die Benutzer-ID, die Sie seinen Freunden zeigen möchten.
Innerhalb der WHILE-Schleife in PHP, die Sie verwenden werden, um die Ergebnisse zu laden, können Sie Results filtern, indem Sie Bedingung
erstellen
%Vor%
In diesem Fall werden Sie Daten aus den Tabellenspalten laden und dann jedes Mal die Spalte mit der Benutzer-ID filtern und nur die ID seines Freundes, den Filter verwenden, um dem Benutzer nicht zu sagen, dass Sie mit ihm befreundet sind.
Entschuldigung, ich habe mysql benutzt, um das Beispiel zu erklären
___ qstnhdr ___ Laravel ORM Freundschaft Beziehung ohne Duplizierung
___ tag123laravel ___ Laravel ist ein Open-Source-PHP-Web-Framework, das dem MVC-Muster folgt.
___ answer17856662 ___
Sie können zwei Suchläufe durchführen, und eine Union-Abfrage verwenden , sodass Sie nur einmal auf die Datenbank zugreifen. Setzen Sie all das in eine benutzerdefinierte Funktion:
%Vor%
___ tag123laravel4 ___ Laravel 4.2 ist die Vorgängerversion des von Taylor Otwell entwickelten Open-Source-PHP-Webentwicklungs-MVC-Frameworks. Laravel hilft Ihnen beim Erstellen von Anwendungen mit einer einfachen, aussagekräftigen Syntax.
___ antwort18281150 ___
Sie sollten nicht versuchen, die zwei Zeilen in eine Zeile umzuwandeln, aber wenn Sie das versuchen, müssen Sie die Datenbank definitiv nicht zweimal drücken:
%Vor%
Das wäre in Laravel:
%Vor%
Sie können auch Sub-Whores erstellen, um sie zu gruppieren, aber das ist ein wenig kompliziert.
___