hootlex/laravel-friendships

getAcceptedFriends not returning the user details

antweny opened this issue · 7 comments

When i fetch all accepted friendship and pass to the view the names and id of the friends not showing.

My controller file

public function connections ()
        {
            $user = Auth::user();
            $connections = $user->getAcceptedFriendships();;
            return view('users.friendships.connections')->with(compact('connections'));
        }

View file

@foreach($connections as $user)
     <li>
        <h6>{{$user->name}}</h6>
    </li>
@endforeach

It displays the list of all accepted friendship without their details like their name.

I need support

Hey, since the pivot table only holds the id's, you will only get the collection of id's when you call the function as is. If you want to get the full details of the users like name, email, etc then you need to eager load them by using ->load('sender') or ->load('recipient')

public function connections ()
        {
            $user = Auth::user();
            $connections = $user->getAcceptedFriendships()->load('sender')->load('recipient');
            return view('users.friendships.connections')->with(compact('connections'));
        }

the above will load the user details for both the sender and the recipient user, if you want details of just one of them, then just use load() with that one.

-TT

I tried this but still details not showing on the view

Can you show me your view file?

here it is

@extends('layouts.templates.twoColumns')

@section('title') My Network | TPE @endsection

@section('content')
    @include('layouts.partials.alerts')
    @if(isset($connections) && !empty($connections))
        <div class="card connections">
            <div class="card-header">
                <h4>{{$connections->count()}} Connections</h4>
            </div>
            <div class="card-body" style="padding:10px;">
                <ul>
                    @foreach($connections as $user)
                        <li>
                            <span>{{$user->name}}</span>
                            <span>{{$user->email}}</span>
                        </li>
                    @endforeach
                </ul>
            </div>
        </div>
    @else
        <div class="card">
            <div class="card-body" style="padding: 10px;">
                <h6 class="text-center">No pending Invitations</h6>
            </div>
        </div>
    @endif
@endsection

Okay, the thing is when you are eager loading properties, you need to echo them accordingly. Let me show you just for sender -

In your controller -
public function connections ()
        {
            $user = Auth::user();
            $connections = $user->getAcceptedFriendships()->load('sender');
            return view('users.friendships.connections')->with(compact('connections'));
        }
--------------------------------------
In your view -
 @foreach($connections as $connection)
      <li>
            <span>{{$connection->sender->name}}</span>
             <span>{{$connection->sender->email}}</span>
      </li>
 @endforeach

And you do the same thing with the recipient or any other eager loaded property.

Next time dd your collections to see all the properties associated with it by doing dd($connections); in your controller.

-TT

this solution works fine but sometimes a sender/recipient is an logged user how to handle this

tried this and worked fine

@foreach($connections as $user)
                        @if($user->sender->name != Auth::user()->name)
                            <li>
                                <div class="float-left">
                                    <a href="{{route('profile.show',$user->id)}}">
                                        <div>
                                            @if (!empty($user->sender->user_detail->profile_picture) )
                                                <img src="{{asset('/uploads/profiles/'.$user->sender->user_detail->profile_picture)}}" />
                                            @else
                                                <img src="{{asset('/uploads/profiles/avatar.jpeg')}}" />
                                            @endif
                                        </div>
                                        <div><h6>{{$user->sender->name}}</h6></div>
                                    </a>
                                </div>
                                <div class="float-right" style="padding-top:10px;">
                                    <a class="btn btn-outline-dark btn-sm" href="{{route('friendships.accept',$user->sender->id)}}"><i class="fa fa-envelope"></i> Message</a>
                                    <a class="btn btn-outline-danger btn-sm" href="{{route('friendships.accept',$user->sender->id)}}" title="Remove Friend"><i class="fa fa-times"></i></a>
                                </div>
                            </li>
                        @elseif($user->recipient->name != Auth::user()->name)
                            <li><div class="float-left">
                                    <a href="{{route('profile.show',$user->id)}}">
                                        <div>
                                            @if (!empty($user->recipient->user_detail->profile_picture) )
                                                <img src="{{asset('/uploads/profiles/'.$user->recipient->user_detail->profile_picture)}}" />
                                            @else
                                                <img src="{{asset('/uploads/profiles/avatar.jpeg')}}" />
                                            @endif
                                        </div>
                                        <div><h6>{{$user->recipient->name}}</h6></div>
                                    </a>
                                </div>
                                <div class="float-right" style="padding-top:10px;">
                                    <a class="btn btn-outline-dark btn-sm" href="{{route('friendships.accept',$user->recipient->id)}}"><i class="fa fa-envelope"></i> Message</a>
                                    <a class="btn btn-outline-danger btn-sm" href="{{route('friendships.accept',$user->recipient->id)}}" title="Remove Friend"><i class="fa fa-times"></i></a>
                                </div>
                            </li>
                        @endif
                    @endforeach