1

我是新手,但我目前正在尝试建立单向好友列表关系,如您所见,我只获得用户的用户 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>

说着,我想见见我朋友的朋友。

非常感谢!告诉我我是否遗漏了什么。

4

1 回答 1

2

您可以使用连接来选择与每个关联的用户模型friend_id

在您的路线中,将您的$friends = ...行替换为:

$friends = DB::table('usuarios')
             ->join('friends', 'friends.friend_id', '=', 'usuarios.id')
             ->where('friends.user_id', '=', $usuario->id)
             ->get();

这将返回与其为好友的用户的集合$usuario

但是有一个更好的方法。

如果你使用 Eloquent,你可以利用急切加载并执行以下操作:

路线

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> 
于 2015-06-26T02:47:45.553 回答