当前位置: 首页 > 后端技术 > PHP

在Laravel用户中关注

时间:2023-03-29 18:56:18 PHP

介绍用户之间相互关注的应用场景还是很常见的。每个平台都会有这样类似的需求,比如Segmentfault、知乎。当然,还有大家最熟悉的Github。每个人都可以拥有追随者和粉丝。在此处创建模型表让我们创建一个中间表。我们可以想象的是,这张表包含了两个用户的id。我们可以创建一个模型$phpartisanmake:modelFollow-m创建好我们的表后,我们将完成下表中的字段InformationSchema::create('follows',function(Blueprint$table){$table->increments('id');$table->integer('follower_id')->unsigned()->index();$table->integer('followed_id')->unsigned()->index();$table->时间戳();});定义完成后,迁移数据表$phpartisanmigrate定义模型方法,写入我们的数据表中,我们将我们关心的信息存储在下面的数据表中,因为这是用户之间的关系,而不是之前的模型用户与帖子或文章之间的关联。其实实现原理都是一样的。我们可以使用User在Model中定义对应的关联//Usersfollowpublicfunctionfollowing(){return$this->belongsToMany(self::class,'follows','follower_id','followed_id')->withTimestamps();}//用户的粉丝publicfunctionfollowers(){return$this->belongsToMany(self::class,'follows','followed_id','follower_id')->withTimestamps();}//关注用户publicfunctionfollowThisUser($user){return$this->following()->toggle($user);}因为用户和用户之间也是多对多的关系,所以我把关注用户的方法写成followThisUser来定义方法路由。接下来,您可以定义相应的方法路由。这里为了方便使用,我定义了一个controller$phpartisanmake:controllerFollowController首先定义我们的路由Route::post('/user/follow','FollowersController@follow');如果用户关注了另一个用户,直接去Executefollow方法即可,这个方法也是一个toggle操作。当然,我们执行的是$follow=$user->followThisUser($userId)。此方法将返回一个数组对象。如果执行了attach方法,那么$follow['attached']就是$userId的值。如果是这样,我们就可以知道followThis方法是实现了attach还是detach方法。那么我们可以增加一个用户的粉丝数或者通知用户发消息。所以你完成后可以执行的逻辑是这样的$follow=user()->followThisUser($userId);//如果用户关注了另一个用户if(count($followed['attached'])>0){//可以通知用户修改用户的关注人数等数据returnresponse()->json(['followed'=>true]);}当然如果我们需要获取某个用户的关注和粉丝,我们可以执行$user->following和$user->followers,这样我们就可以得到对应的用户数据信息。其实整个实现和我们点赞一个帖子是一样的,只不过对象变成了用户和用户之间的关系。