Was ist der beste Weg, um eine Freundschaft Beziehung mit eloquent zu modellieren? Mein Tabellenschema ist unten und ich möchte eine Beziehung definieren, in der ich alle Freunde wie folgt abrufen könnte.Laravel ORM Freundschaft Beziehung ohne Duplizierung
<?php
class User extends Eloquent {
public function friends() {
return $this->belongsToMany('User', 'friendships', 'user_id', 'friend_id')->orWhere($this->id,'=', 'friend_id');
}
}
+----+---------+-----------+----------+---------------------+---------------------+
| id | user_id | friend_id | state | created_at | updated_at |
+----+---------+-----------+----------+---------------------+---------------------+
| 1 | 3 | 1 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 2 | 2 | 3 | accepted | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------+-----------+----------+---------------------+---------------------+
Die Beziehung oben ist in der Nähe arbeiten, als ich für Freunde mit der Benutzer-ID von 3 sehe erhalte ich Benutzer 1 und 3, aber offensichtlich will ich 1 und 2
Freundschaft Tabelle
user_id: Die Benutzer-ID, die die Freundschaft angefordert hat friend_id: Die Benutzer-ID des Ziel-Freundes
Status: Ob die Freundschaft aussteht, akzeptiert oder blockiert ist.
created_at und updated_at
Ich bin mir bewusst, dass es Lösungen von Laravel Many to many self referencing table only works one way, wo ich die Freunde von beiden Seiten der Beziehung abrufen kann, aber ich muß zwei Reihen, zum Beispiel, wenn Benutzer 1 und 3 Freunde sind, dann in einer row 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).
Danke das sieht genau wie ich will aber ich habe diesen Fehler Argument 1 an Illuminate \ Database \ Query \ Builder :: mergeBindings() muss eine Instanz von Illuminate \ Database \ Query \ Builder, Instanz von Illuminate \ Database sein \ Eloquent \ Relations \ BelongsToMany gegeben, in /var/www/cc/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php auf Linie 857 und definiert –