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>