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?
移民:
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)
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |