如何在关注或取消关注之前检查用户是否关注了另一个(附加)

时间:2017-12-15 15:45:33

标签: mysql if-statement laravel-5.4

我在我的用户表中使用了很多关系来使登录用户跟随另一个,但我没有自己想出来,我检查了其他人做了什么,并尝试做类似的事情并且它有效。在我的方法中,我有:

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。

1 个答案:

答案 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);
    }
}