Qual è il modo migliore per modellare un rapporto di amicizia con eloquente? Il mio schema di tabella è sotto e vorrei definire una relazione in cui potrei recuperare tutti gli amici qualcosa come segue.Laravel ORM Amicizia Relazione senza duplicazione
<?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 |
+----+---------+-----------+----------+---------------------+---------------------+
Il rapporto di cui sopra è vicino a lavorare quando mi cerca amici con l'id utente di 3 ottengo utenti 1 e 3, ma ovviamente voglio 1 e 2.
Amicizia Tabella
user_id: l'ID utente che ha richiesto l'amicizia
friend_id: l'ID utente dell'amico selezionato
stato: se l'amicizia è in sospeso, accettata o bloccata.
created_at e updated_at
Sono consapevole del fatto che ci sono soluzioni da Laravel Many to many self referencing table only works one way dove posso recuperare gli amici da entrambi i lati della relazione, ma devo essere due file, ad esempio, se l'utente 1 e 3 sono gli amici, poi in uno riga user_id = 3 e friend_id = 1, e nella riga successiva vice versa. (O se non ho due righe devo fare due domande).
Grazie questo sembra esattamente quello che voglio comunque ho ricevuto questo errore L'argomento 1 passato a Illuminate \ Database \ Query \ Builder :: mergeBindings() deve essere un'istanza di Illuminate \ Database \ Query \ Builder, istanza di Illuminate \ Database \ Eloquent \ Relations \ BelongsToMany dato, chiamato in /var/www/cc/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php sulla riga 857 e definito –