博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel 用户之间关注
阅读量:6334 次
发布时间:2019-06-22

本文共 1729 字,大约阅读时间需要 5 分钟。

介绍

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

当然还有最熟悉的Github每个人可以有关注者和粉丝

建立模型表

这里我们去建立一个中间表 可以想象得到的是这张表里包含了两个用户的id 我们可以去创建一个Model

$ 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();});

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

$ php artisan migrate

定义模型方法

写完我们的数据表 我们是将关注的信息存放在follows这个数据表的 因为这是用户与用户之间的关联

并不是之前的用户与帖子或文章这样的模型关联 其实实现的道理是一样的

我们就可以在User Model里去定义对应的关联

//用户关注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

首先我们去定义一下我们的路由

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

这样的话我们就可以拿到对应的用户数据信息了

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

转载地址:http://agioa.baihongyu.com/

你可能感兴趣的文章
oracle INTERVAL分区表锁分区操作
查看>>
Linux服务器使用tar加密压缩文件
查看>>
《面向模式的软件体系结构4-分布式计算的模式语言》读书笔记(1)--- 从混沌到结构(1)...
查看>>
return、break、continue三者区别
查看>>
ajax提交与普通表单提交的优缺点
查看>>
avascript获取网页中指定节点的父节点、子节点的方法小结
查看>>
apache和php
查看>>
浮点数转字符串
查看>>
nginx的站点安全
查看>>
×××S 2012 参数化报表 -- 日期参数
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(15)
查看>>
如何才能提高Java Web性能?
查看>>
RHEL7下PXE+NFS+Kickstart无人值守安装操作系统
查看>>
PostgreSQL ip地址 查询
查看>>
10.Spring整合Hibernate_3_HibernateTemplate
查看>>
Mysql数据类型
查看>>
【MongoDB学习笔记2】MongoDB基本知识
查看>>
testng的报告自定义笔记三
查看>>
百度ECharts初探
查看>>
DirectSound 混音的实现
查看>>