Laravel 5.1关系,有用户ID,但我没有用户名

时间:2015-06-25 16:23:50

标签: laravel laravel-5 laravel-5.1

我是新手,但我目前正在尝试构建单向友好列表关系,因为您可以看到我只获得用户的用户ID,但我需要他们的用户名,问题是,这些ID来自关系表"朋友"作为查询的结果,它没有用户名,而是存储users_id。

这就是我的意思!

Screenshot

这是我的配置

*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>

说,我想看看我朋友的朋友。

非常感谢!告诉我,如果我错过了什么。

1 个答案:

答案 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>