Laravel 5.1 关系,有用户 ID,但我没有他们的用户名
Laravel 5.1 relationships, Have users ids, but i dont have they usernames
我是新手,但我目前正在尝试建立一种单向的好友列表关系,如您所见,我只获得了用户的用户 ID,但我需要他们的用户名,问题是,这些 ID 是来自 table "friends" 作为查询结果的关系,它没有用户名,而是存储 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>
说了,我要见我朋友的朋友
非常感谢!如果我遗漏了什么请告诉我。
您可以使用 join 到 select 与每个 friend_id
关联的用户模型。
在您的路线中,将 $friends = ...
行替换为:
$friends = DB::table('usuarios')
->join('friends', 'friends.friend_id', '=', 'usuarios.id')
->where('friends.user_id', '=', $usuario->id)
->get();
这将 return 与 $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>
我是新手,但我目前正在尝试建立一种单向的好友列表关系,如您所见,我只获得了用户的用户 ID,但我需要他们的用户名,问题是,这些 ID 是来自 table "friends" 作为查询结果的关系,它没有用户名,而是存储 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>
说了,我要见我朋友的朋友
非常感谢!如果我遗漏了什么请告诉我。
您可以使用 join 到 select 与每个 friend_id
关联的用户模型。
在您的路线中,将 $friends = ...
行替换为:
$friends = DB::table('usuarios')
->join('friends', 'friends.friend_id', '=', 'usuarios.id')
->where('friends.user_id', '=', $usuario->id)
->get();
这将 return 与 $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>