Laravel 用户之间关注

介绍

有关用户之间的相互关注这样的应用场景仍是很常见的 每一个平台都会有这样相似的需求 就好比Segmentfault知乎php

固然还有最熟悉的Github每一个人能够有关注者和粉丝shell

创建模型表

这里咱们去创建一个中间表 能够想象获得的是这张表里包含了两个用户的id 咱们能够去建立一个Modeljson

$ php artisan make:model Follow -m

建立完咱们的表以后 咱们去完善下表的字段信息数组

Schema::create('follows', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('follower_id')->unsigned()->index();
    $table->integer('followed_id')->unsigned()->index();
    $table->timestamps();
});

定义完毕以后去迁移下数据表post

$ php artisan migrate

定义模型方法

写完咱们的数据表 咱们是将关注的信息存放在follows这个数据表的 由于这是用户与用户之间的关联
并非以前的用户与帖子或文章这样的模型关联 其实实现的道理是同样的 this

咱们就能够在User Model里去定义对应的关联code

//用户关注
public function following()
{
    return $this->belongsToMany(self::class,'follows','follower_id','followed_id')->withTimestamps();
}

//用户的粉丝
public function followers()
{
    return $this->belongsToMany(self::class,'follows','followed_id','follower_id')->withTimestamps();
}

//关注用户
public function followThisUser($user)
{
    return $this->following()->toggle($user);
}

由于用户与用户之间也是一种多对多的关系 因此我将关注用户的方法写成followThisUser对象

定义方法路由

接下来就能够去定义相应的方法路由了 这里为了使用方便我定义了一个控制器路由

$ php artisan make:controller FollowController

首先咱们去定义一下咱们的路由rem

Route::post('/user/follow','FollowersController@follow');

若是用户去关注另外一个用户的话 只须要去执行follow方法 而这个方法也是一个toggle式的操做

固然咱们在执行

$follow = $user->followThisUser($userId)

这个方法是他会返回一个数组对象 若是是执行attach方法的话

那么$follow['attached']$userId的值

若是这样的话咱们就能够知道followThis这个方法究竟是执行了attach仍是detach方法了
那么接着咱们就能够去增长一个用户的粉丝数或者去通知用户发送一个消息这样的操做了

因此你能够在执行完成以后的逻辑是这样的

$follow = user()->followThisUser($userId);
//若是用户关注了另外一个用户
if(count($followed['attached'])>0){
    //能够去通知用户 修改用户的关注人数等数据
    return response()->json(['followed' => true]);
}

固然若是咱们须要拿到一个用户的关注的人和粉丝的话 能够去执行

$user->following

以及

$user->followers

这样的话咱们就能够拿到对应的用户数据信息了

其实整个实现起来就和咱们对一篇帖子进行点赞同样 只不过对象变成了用户与用户之间

相关文章
相关标签/搜索