我需要确保当用户发送好友请求而另一个用户接受它时,两个用户的好友列表都会发生变化。不仅是接受请求的人。这就是问题。当用户接受好友请求时,好友出现在他的好友列表中,但不会出现在发送好友请求的好友中。
这是我的控制器功能:
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('/');
}
显示好友请求
public function showRequests()
{
$requests = Friend::where('friend_id', '=', Auth::user()->id)->where('accepted', '=', 0)->get();
return view('users.friends.requests', compact('requests'));
}
接受好友请求
public function accept($id)
{
$friend = Friend::where('id', $id)->first();
$friend->accepted = 1;
$friend->save();
return redirect()->back();
}
显示好友列表
public function show()
{
$friends = Friend::where('friend_id', '=', Auth::user()->id)->where('accepted', '=', '1')->get();
return view('users.friends.show', compact('friends'));
}
关系。 user.php的:
public function friend()
{
return $this->hasMany('App\Friend');
}
Friend.php:
public function user()
{
return $this->belongsTo('App\User');
}
答案 0 :(得分:1)
您考虑过添加pivot table吗? 您可以使用Laracasts/Generators轻松制作支点。
创建数据透视表后,您将执行类似
的操作public function add(...) { // Add friends
$friend1 = User::find(1);
$friend2 = User::find(2);
$friend1->friends()->attach($friend2);
}
然后为了得到关系,你会做:
public function show($id) {
$user = User::find($id)
return $user->friends()->get()
}
您的接受/待处理/拒绝请求可以是数据透视表中的简单列。
您还必须为friends()
模型实施User
功能:
class User extends Authenticatable {
...
public function friends() {
return $this->belongsToMany('App\User')->withTimestamps();
}
}
答案 1 :(得分:1)
这只适用于friends
表。
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());
}
答案 2 :(得分:-1)
你能试试吗?
public function show()
{
$friends = Auth::user()->friend()->where('accepted', '=', '1')->get();
dd($friends);
}