Laravel Eloquent relationship for user to friends

The*_*apa 2 php mysql eloquent laravel-5.4

I am confused with eloquent relationships. I have two tables:

USERS:
id, name, pwd, etc...

FRIENDS:
id, user_id, friend_id
Run Code Online (Sandbox Code Playgroud)

For the FRIENDS table, I have two foreign keys:

$t->foreign('user_id')
  ->references('id')
  ->on('users');

$t->foreign('friend_id')
  ->references('id')
  ->on('users');
Run Code Online (Sandbox Code Playgroud)

In each class I have the following relationships:

USER class:

/**
 * A user can have many friends
 */
public function friends()
{
    return $this->hasMany(User::class, 'friend_id', 'id');
}
Run Code Online (Sandbox Code Playgroud)

FRIEND class:

/**
 * A friend can belong to a user
 */
public function friend()
{
    return $this->belongsTo(User::class, 'id', 'user_id');
}

/**
 * A user friends are connected to
 */
public function user()
{
    return $this->belongsTo(User::class, 'id', 'friend_id');
}
Run Code Online (Sandbox Code Playgroud)

I want to end up with

Auth::user()->friends()->get();
Run Code Online (Sandbox Code Playgroud)

Should the relationship be a hasManyThrough()? How do I implement this when the USERS table is self referenced via the FRIENDS table?

Ulr*_*dle 5

移民:

public function up()
{
    Schema::create('friend_user', function(Blueprint $table) {
        $table->increments('id');
        $table->integer('friend_id')->unsigned()->index();
        $table->integer('user_id')->unsigned()->index();
        $table->foreign('friend_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
}
Run Code Online (Sandbox Code Playgroud)

用户模型:

public function friends()
{
    return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
}
Run Code Online (Sandbox Code Playgroud)

更新

获取所有好友:

Auth::user()->friends (or Auth::user()->friends()->get())
Run Code Online (Sandbox Code Playgroud)

添加朋友:

Auth::user()->friends()->attach([2,3,4]); // Add user_id 2, 3 and 4
Run Code Online (Sandbox Code Playgroud)

删除好友:

Auth::user()->friends()->detach([2]); // Remove user_id = 2
Run Code Online (Sandbox Code Playgroud)

同步好友:

Auth::user()->friends()->sync([7]); // Remove old and add user_id = 7
Run Code Online (Sandbox Code Playgroud)