我是新手,但我目前正在尝试构建单向友好列表关系,因为您可以看到我只获得用户的用户ID,但我需要他们的用户名,问题是,这些ID来自关系表"朋友"作为查询的结果,它没有用户名,而是存储users_id。
这就是我的意思!
这是我的配置
*usuarios stands for users*
table usuarios:
id->primary
username
friends table:
id->primary
user_id->reference->users.id
friend_id->reference->users.id
用户模型:
public function friends()
{
return $this->belongsToMany('App\User', 'friends', 'user_id', 'friend_id');
}
现在的路线:
/* 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);
});
模板
<ul style="list-style-type: none">
<li><a href="#">friends placeholder</a>
@foreach ($friends as $friend)
<li> {{$friend->friend_id}}</li>
@endforeach
</li>
</ul>
说,我想看看我朋友的朋友。
非常感谢!告诉我,如果我错过了什么。
答案 0 :(得分:2)
您可以使用join选择与每个friend_id
相关联的用户模型。
在您的路线中,将$friends = ...
行替换为:
$friends = DB::table('usuarios')
->join('friends', 'friends.friend_id', '=', 'usuarios.id')
->where('friends.user_id', '=', $usuario->id)
->get();
这将返回与$usuario
但还有更好的方法。
如果你正在使用Eloquent,你可以利用eager loading并执行此操作:
路线:
Route::get('user/{usuario}', function($usuario) {
$usuario = \App\User::with('friends')
->where('username', $usuario)
->firstOrFail();
return view('users.profile')->with('user', $usuario);
});
模板:
<ul style="list-style-type: none">
<li><a href="#">friends placeholder</a>
@foreach ($user->friends as $friend)
<li>{{ $friend->username }}</li>
@endforeach
</li>
</ul>