朋友系统bug(laravel 5.2)(没有获得所需的视图)

时间:2016-08-25 08:00:51

标签: php laravel laravel-5 laravel-5.2 relationship

当两个用户成为好友时,会显示

你和{{$user->getNameOrUsername()}}是朋友(工作正常)

但它显示在每个配置文件中,我希望它只显示在这两个用户(这是朋友)

如果您需要任何其他文件或功能,请告诉我。

我的观点:

 @if(Auth::user()->hasFriendRequestPending($user))
    <p>waiting for {{$user->getNameOrUsername()}} to accept ur reqst </p>
 @elseif(Auth::user()->hasFriendRequestReceived($user))
    <a href="{{route('friend.accept',['username' => $user->username])}}" class="btn btn-primary" >Accept frnd reqst</a>
 @elseif(Auth::user()->isFriendsWith($user))
    <p>you and {{$user->getNameOrUsername()}} are friends</p>
 @else
    <a href="{{route('friend.add',['username' => $user->username])}}" class="btn btn-primary">Add as friend</a>
 @endif
朋友控制器:

    class FriendController extends Controller
{
   public function getIndex(){

    $friends=Auth::user()->friends();
    $requests = Auth::user()->friendRequests();
    return view('friends',['friends'=>$friends,'requests' => $requests]);
   }

   public function getAdd($username){


        $user = User::where('username', $username)->first();
        if(!$user){
            return redirect()->route('home')->with('info', 'That user could not be found');
        }
        if(Auth::user()->id === $user->id){
            return redirect()->route('home');
        }
        if(Auth::user()->hasFriendRequestPending($user) || $user->hasFriendRequestPending(Auth::user())) {
            return redirect()->route('myplace', ['username' => $user->username])
            ->with('info', 'Friend Request already pending.');
        }
        if(Auth::user()->isFriendsWith($user)) {
            return redirect()->route('myplace', ['username' => $user->username])
            ->with('info', 'You are already friends.');
        }
        Auth::user()->addFriend($user);
        return redirect()->route('myplace', ['username' => $user->username])
            ->with('info', 'Friend Request Sent.');
    }

    public function getAccept($username){
        $user = User::where('username', $username)->first();

        if(!$user) {
            return redirect()->route('home')->with('info', 'That user can not be found.');
        }
        if(!Auth::user()->hasFriendRequestReceived($user)) {
            return redirect()->route('home');
        }
        Auth::user()->acceptFriendRequest($user);
        return redirect()->route('myplace', ['username' => $user->username])
            ->with('info', 'Friend Request accepted.');
       }
    }

PostController中:

public function getmyplace($username)
{
    $user = User::where('username', $username)->first();
    if(!$user)
        abort(404);

    $posts=Post::where(function($query) use($user)
     {
         $query->where('user_id',$user->id)
            ->orWhere('target_id',$user->id);
    })
    ->orderBy('created_at','desc')->get();


    //User::find(Auth::id())->posts;

    //$posts=Post::orderBy('created_at','desc')->get();

    $accounts=Account::orderBy('updated_at','desc')->limit(1)->get();

    return view('myplace',['user'=>$user,'posts'=>$posts,'accounts'=>$accounts]);
}

用户模型功能:

public function getNameOrUsername(){
    return $this->getName() ?: $this->username;
}

public function getFirstNameOrUsername() {
    return $this->firstname ?: $this->username;
}
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());
}
public function friendRequests(){
    return $this->friendsOfMine()->wherePivot('accepted', false)->get();
}
public function friendRequestsPending() {
    return $this->friendOf()->wherePivot('accepted', false)->get();
}
public function hasFriendRequestPending(User $user) {
    return (bool) $this->friendRequestsPending()->where('id', $user->id)->count();
}
public function hasFriendRequestReceived(User $user){
    return (bool) $this->friendRequests()->where('id', $user->id)->count();
}
public function addFriend(User $user){
    $this->friendOf()->attach($user->id);
}

public function deleteFriend(User $user){
    $this->friendOf()->detach($user->id);
}

public function acceptFriendRequest(User $user) {
    $this->friendRequests()->where('id', $user->id)->first()->pivot
    ->update([
        'accepted'=>true,
    ]);
}
public function isFriendsWith(User $user) {

    return (bool) $this->friends()->where('id',$user->id)->count();
}

1 个答案:

答案 0 :(得分:1)

正如聊天http://chat.stackoverflow.com/rooms/121812中所讨论的,问题是您从控制器返回$ user

 return view('myplace',['user'=>$user,'posts'=>$posts,'accounts'=>$accounts]);

然后在视图循环中通过用户朋友

@foreach(Auth::user()->friends() as $user) {

}

这样就会覆盖从控制器返回的$ user变量。

只需重命名$ user即可解决问题