中间表操作

为用户和粉丝模型进行了多对多关联之后,便可以使用 Eloquent 模型为多对多提供的一系列简便的方法。如使用 attach 方法或 sync 方法在中间表上创建一个多对多记录,使用 detach 方法在中间表上移除一个记录,创建和移除操作并不会影响到两个模型各自的数据,所有的数据变动都在 中间表 上进行。attach, sync, detach 这几个方法都允许传入 id 数组参数。

sync 方法会接收两个参数,第一个参数为要进行添加的 id,第二个参数则指明是否要移除其它不包含在关联的 id 数组中的 id,true 表示移除,false 表示不移除,默认值为 true。由于我们在关注一个新用户的时候,仍然要保持之前已关注用户的关注关系,因此不能对其进行移除,所以在这里我们选用 false。

最后我们可以借助 detach 来对用户进行取消关注的操作。

借助这两个方法可以让我们非常简单的实现用户的「关注」和「取消关注」的相关逻辑,具体在用户模型中定义关注(follow)和取消关注(unfollow)的方法如下:

app/Models/User.php

followings()->sync($user_ids, false);
    }

    public function unfollow($user_ids)
    {
        if (!is_array($user_ids)) {
            $user_ids = compact('user_ids');
        }
        $this->followings()->detach($user_ids);
    }
}    

is_array 用于判断参数是否为数组,如果已经是数组,则没有必要再使用 compact 方法。我们并没有给 sync 和 detach 指定传递参数为用户的 id,这两个方法会自动获取数组中的 id。

接下来我们还需要一个方法用于判断当前登录的用户 A 是否关注了用户 B,代码实现逻辑很简单,我们只需要判断用户 B 是否包含在用户 A 的关注人列表上即可。这里我们将用到 contains 方法来做判断。

app/Models/User.php

followings->contains($user_id);
    }
}

你可能感兴趣的:(中间表操作)