I'm a novice but I'm currently trying to build a one way friendlist relationship, as you can see I get only the userid of the users, but I need their usernames, the problem is, these ids are coming from a relationship table "friends" as results of a query, which doesn't have usernames, instead it stores users_id.
This is what i GET!
Here is my config
*usuarios stands for users*
table usuarios:
id->primary
username
friends table:
id->primary
user_id->reference->users.id
friend_id->reference->users.id
User model:
public function friends()
{
return $this->belongsToMany('App\User', 'friends', 'user_id', 'friend_id');
}
Now the Routes:
/* get single user by id */
Route::get('user/{usuario}', function($usuario) {
$usuario = DB::table('usuarios')->where('username', $usuario)->first();
$friends = DB::table('friends')->where('user_id', '=', $usuario->id)->get();
return view('users.profile')
->with('friends', $friends)
->with('user', $usuario);
});
Templating
<ul style="list-style-type: none">
<li><a href="#">friends placeholder</a>
@foreach ($friends as $friend)
<li> {{$friend->friend_id}}</li>
@endforeach
</li>
</ul>
said that, I want to see my friend's friends.
Thank you very much! Tell me if Im missing something.
You can use a join to select the User model associated with each
friend_id
.In your route, replace your
$friends = ...
line with this:This will return the collection of Users who are friends with
$usuario
But there is a better way.
If you're using Eloquent you can take advantage of eager loading and do this:
Route:
Template: