资讯专栏INFORMATION COLUMN

Laravel 用户之间关注

Aceyclee / 351人阅读

摘要:介绍有关用户之间的相互关注这样的应用场景还是很常见的每个平台都会有这样类似的需求就比如和知乎当然还有最熟悉的每个人可以有关注者和粉丝建立模型表这里我们去建立一个中间表可以想象得到的是这张表里包含了两个用户的我们可以去创建一个创建完我们的表

介绍

有关用户之间的相互关注这样的应用场景还是很常见的 每个平台都会有这样类似的需求 就比如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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22599.html

相关文章

  • 简化你的关注与点赞 - Laravel Follow & Vote

    摘要:废话不多说,下面我简单介绍一下两个包的用法吧。还有的是这里使用了,如何去理解以及更好地使用最后,当然是要感谢超哥。经讨论更名为更名为更名为更名为 showImg(https://pigjian.com/storage/post_img/2017-04-12/follow-vote.png); 本文主要介绍两个包: Laravel - Follow : https://github.co...

    CodeSheep 评论0 收藏0
  • Laravel深入学习1 - 依赖注入

    摘要:然而,我们需要注意的是仅是软件设计模式依赖注入的一种便利的实现形式。容器本身不是依赖注入的必要条件,在框架他只是让其变得更加简便。首先,让我们探索下为什么依赖注入是有益的。继续深入让我们通过另一个示例来加深对依赖注入的理解。 声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味的翻译,能保证9...

    sunsmell 评论0 收藏0
  • Laravel最佳实践--事件驱动编程

    摘要:事件驱动编程是图形用户界面和其他应用程序例如应用程序中使用的主要范例,用于执行某些操作来响应用户输入。我们来看一下事件驱动编程带来的收益。现在让我们看看采用事件驱动编程方法如何实现上述相同的功能。 在这篇文章中我们将了解到什么是事件驱动编程以及在Laravel中如何开始构建一个事件驱动应用,同时我们还将看到如何通过事件驱动编程来对应用程序的逻辑进行解耦。 在开始之前,先说明一下这篇文章...

    Drummor 评论0 收藏0
  • Laravel 5.6 正式发布(文档翻译工作将在春节后启动)

    摘要:默认的应用哈希驱动通过新增的配置文件来控制。你可以在我们的文章中学习到更多的关于密码哈希算法的内容方法在类中引入了两个新的生成唯一的方法引入了两个新的方法来生成。 showImg(https://segmentfault.com/img/remote/1460000013229904?w=1400&h=708); Laravel 5.6 Laravel 5.6正式成为laravel框架...

    Kross 评论0 收藏0
  • SegmentFault 社区访谈 | mcfog:自由进出 Coding && A

    摘要:上次的访谈,介绍了下可爱的依云酱,回忆传送门。这里简单地介绍下龙女仆,全名小林家的龙女仆,为什么介绍这部剧呢因为设计狮颜值同学也安利了这部。剧情简介在独身又劳累的小林划重点一名程序员身边突然出现的穿着女仆服装的美少女托尔。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的访谈,介绍了下可爱的依云酱,回忆传送门。不...

    neroneroffy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<