收藏操作
HDCMS / 更新于3个月前

收藏操作

收藏使用多态机制,也就是说任何模型都可以收藏,下面用户收藏文章的操作。

[TOC]

表结构

数据表必须存在 favorite_num 字段用于记录收藏数。

模型定义

下面是给 Article 模块的 Content 模型收藏操作。

  1. 引入 App\Traits\Site traits 类。

    use App\Traits\Site;
    class User extends Authenticatable
    {
    use Site;
    
     //返回当前模型的链接
    public function getFavoriteLink(){
    return module_link('comment.content.show', $this);
    }
    
    //返回当前模型的标题
    public function getFavoriteTitle(){
        return mb_substr($this['content'], 0, 80, 'utf-8');
    }
    
    //收藏动作后执行这个方法
    public function favoriteUpdate()
    {
        $this['favorite_count'] = $this->favoriteCount();
        return $this->save();
    }
    ...
    }

    路由使用

    比如我们要给Article模块中的Content文章模型,编号为2的文章收藏数,每一个参数是文章模型类,每二个参数为要给收藏的2号文章,路由定义如下:

    route('member.favorite.make',['Modules-Article-Content',2])
    路由参数说明: 参数 说明
    参数一 模型类名,以 - 分隔
    参数二 模型编号

收藏统计

引入 Favorite trait 后使用 favorite_count 动态属性获取收藏数

auth()->user()->favoriteCount();

前台调用

系统提供了方便的组件,通过一行代码就可以实现点赞效果。

@include('components.favorite',['model'=>$topic,'avatar'=>true])

也可以请求链接完成操作。

<a href="{{route('member.favorite.make',['App-User',$article)}}">
    赞 【 {{auth()->user()->favorite_count}} 】
</a>

如果是ajax请求返回JSON数据如下:

{"message":"收藏成功","action":"add","total":99}
或
{"message":"取消收藏","action":"del","total":98}

模型方法

模型需要继承了App\Traits\Favorite traits 类后可以使用以下方法。

//判断当前用户是否收藏
public $topic->isFavorite()

//收藏统计
public function favoriteCount()

//收藏动作后执行这个方法
public function favoriteUpdate()
我们的使命:传播互联网前沿技术,帮助更多的人实现梦想
Copyright © 2010-2018 houdunren.com All Rights Reserved 京ICP备12048441号-3
: 010-86467608 : 2300071698@qq.com
编码: 海豚日记