2016-07-30 8 views
1

Ich muss sicherstellen, dass, wenn der Benutzer Freundschaftsanfragen sendet und ein anderer Benutzer es akzeptiert, die Freundesliste für beide Benutzer geändert wird. Nicht nur für denjenigen, der die Anfrage akzeptiert hat. Das ist das Problem. Wenn der Benutzer die Freundschaftsanfrage annimmt, erscheint der Freund in seiner Freundesliste, aber nicht in der Freundesanfrage.Laravel. Zeige akzeptierte Freunde für beide Benutzer

Dies ist mein Controller-Funktion:

public function add($id) // Add friends 
    { 
     $friend = new Friend(); 
     $friendId = User::where('id', $id)->first(); 
     $friend->user_id = Auth::user()->id; 
     $friend->friend_id = $friendId->id; 
     $friend->save(); 
     return redirect('/'); 
    } 

Freund

Zeigt fordert
public function showRequests() 
{ 
     $requests = Friend::where('friend_id', '=', Auth::user()->id)->where('accepted', '=', 0)->get(); 
     return view('users.friends.requests', compact('requests')); 
} 

Akzeptiert Freund Anfrage

public function accept($id) 
{ 
    $friend = Friend::where('id', $id)->first(); 
    $friend->accepted = 1; 
    $friend->save(); 
    return redirect()->back(); 
} 

Freundesliste Zeigt

public function show() 
{ 
    $friends = Friend::where('friend_id', '=', Auth::user()->id)->where('accepted', '=', '1')->get(); 
    return view('users.friends.show', compact('friends')); 
} 

Die Beziehungen. User.php:

public function friend() 
{ 
    return $this->hasMany('App\Friend'); 
} 

Friend.php:

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 
+0

Taylor tatsächlich erwähnt dieses spezielle Beispiel auf GitHub Problem so ich wahrscheinlich mit dieser https://github.com/laravel/framework/issues/441 – ExoticChimp

Antwort

1

Haben Sie darüber nachgedacht, eine pivot table hinzufügen? Sie können einfach Pivots mit Laracasts/Generators erstellen.

Sobald Sie die Pivot-Tabelle erstellen, müssen Sie etwas tun, wie

public function add(...) { // Add friends 
    $friend1 = User::find(1); 
    $friend2 = User::find(2); 
    $friend1->friends()->attach($friend2); 
} 

Dann die Beziehung zu erhalten, werden Sie tun:

public function show($id) { 
    $user = User::find($id) 
    return $user->friends()->get() 
} 

Und Ihre akzeptiert/anhängige/verweigert Anfragen können einfache Spalten in Ihrer Pivot-Tabelle sein.

Sie werden auch die friends() Funktion für die User Modell implementieren müssen:

class User extends Authenticatable { 
... 
    public function friends() { 
     return $this->belongsToMany('App\User')->withTimestamps(); 
    } 
} 
+0

Freunden Tabelle in der Datenbank hat diese Felder gehen würde: „user_id "," friend_id "," akzeptiert "ist es nicht genug? –

+0

@labasGamePagevisogero aber was, wenn ein 'Benutzer' mit mehreren anderen Benutzern befreundet ist? Wie speichern Sie alle ihre IDs in Ihrer Spalte "friend_id"? Vielleicht liege ich falsch, aber ich denke an die Freund-Freundin-Beziehung als eine Zwei-Wege-Beziehung, also welcher Freund sollte die 'Freund_id' beibehalten und wie wirst du das wissen ... Du wirst auch Probleme damit haben Suchen und Sortieren später. – Grigio

+0

Okay. Also sollte ich meine "Freunde" -Tabelle löschen und eine neue Tabelle wie "friend_user" erstellen? –

-1

Können Sie das versuchen?

public function show() 
{ 
    $friends = Auth::user()->friend()->where('accepted', '=', '1')->get(); 
    dd($friends); 
} 
+0

Sie sollten immer Erklärungen zu dem Code, den Sie schreiben, anbieten. Code-Only-Antworten sind für zukünftige Leser nicht sehr nützlich – ExoticChimp

1

Dies funktionierte mit nur friends Tabelle.

public function friendsOfMine() 
{ 
    return $this->belongsToMany('App\User', 'friends', 'user_id', 'friend_id'); 
} 

public function friendOf() 
{ 
    return $this->belongsToMany('App\User', 'friends', 'friend_id', 'user_id'); 
} 

public function friends() 
{ 
    return $this->friendsOfMine()->wherePivot('accepted', true)->get()->merge($this->friendOf()->wherePivot('accepted', true)->get()); 
} 
Verwandte Themen