我在我的用户表中使用了很多关系来使登录用户跟随另一个,但我没有自己想出来,我检查了其他人做了什么,并尝试做类似的事情并且它有效。在我的方法中,我有:
function follow(User $user) {
$this->followers()->attach($user->id);
}
function unfollow(User $user) {
$this->followers()->detach($user->id);
}
允许我关注。
这些表与以下函数相关:
return $this->belongsToMany('App\User', 'followers', 'user_id', 'follower_id');
现在我通过控制器传递$user
值,控制器非常简单:
$userId = User::find($user);
$willfollow = Auth::user();
$willfollow->unfollow($userId);
我知道可能不需要控制器信息,但是如果很容易检查控制器内的关系,我宁愿这样做,因为我显然对方法的使用知之甚少。
我正在使用Laravel 5.4。
答案 0 :(得分:2)
自Laravel 5.3起,您可以使用syncWithoutDetaching(效率最高):
$this->followers()->syncWithoutDetaching([$user->id]);
其他方式:
$this->followers()->sync([$user->id], false);
在保存之前检查现有(仅当您已加载$this->followers
时才有效):
function follow(User $user) {
if(!$this->followers->contains($user)) {
$this->followers()->attach($user->id);
}
}