由于最近都在搭建自己的博客,像一些基本的功能如文章的发表,编辑等功能在之前就实现好了,今天主要是说说自己在实现浏览次数的统计上的解决方法。

在Laravel中,利用Eloquent的One-To-Many的关系,实现一篇文章有多条浏览记录,具体思路如下:

用户访问文章页面-->取得ip地址和文章id,存入数据库 再次访问时根据ip和文章id判断是否新增记录

利用weboAp/VisitorPackage可以轻松实现,具体步骤如下:

1.在composer.json中添加weboAp/VisitorPackage:

{

"require": {

"weboap/visitor": "dev-master"

}

}

然后执行:

composer update

将Service添加到config/app.php中:

'Weboap\Visitor\VisitorServiceProvider'

之后再执行下面两个命令:

php artisan vendor:publish

php artisan migrate

storage/geo/

当然/geo是需要自己创建的目录。

上面的步骤之后你将会得到一个表visitor_registry,这里我们首先为visitor_registry添加一个字段article_id用于One-To-Many的关系。

php artisan make:migration add_article_id_to_visitor_registry --table='visitor_registry'

在生成的migration大概是这样写:

public function up()

{

Schema::table('visitor_registry', function (Blueprint $table) {

$table->integer('article_id')->unsigned()->index();

$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');

});

}

创建VisitorRegistry模型:

php artisan make:model VisitorRegistry

在VisitorRegistry.php中写上一下代码:

protected $table = 'visitor_registry';

protected $fillable = ['clicks'];

public function articles()

{

return $this->belongsTo('App\Article');

}

上面我们通过articles()声明了VisitorRegistry对Article的关系,于是在Article中也声明关系:

public function visitors()

{

return $this->hasMany('App\VisitorRegistry');

}

关系修改完毕之后,由于我们为visitor_registry表添加了article_id字段,所以我们需要修改weboAp/VisitorPackage中Visitor.php文件的log()方法,因为这个就是执行插入数据的实际方法,我们首先给它闯入一额文章的id:

public function log($article_id){}

然后对log()方法里面修改第二个条件判断:

if( $this->has( $ip ) && $this->hasArticle($article_id) )

{

//ip already exist in db.

$visitor = VisitorRegistry::where('ip','=',$ip)->where('article_id','=',$article_id)->first();

$visitor->update(['clicks'=>$visitor->clicks + 1]);

return true;

}

上面我们自己添加了一个hasArticle($article_id,$ip),我们可以直接将这个方法写在Visitor.php中:

public function hasArticle($id,$ip)

{

return count(VisitorRegistry::where('article_id','=',$id)->where('ip','=',$ip)->get()) > 0;

}

最后我们还要修改log()中的插入数据的数组数据$data:

$data = array(

'ip' => $ip,

'country' => $country,

'clicks' => 1,

'article_id' => $article_id,

'updated_at' => c::now(),

'created_at' => c::now()

);

我们就添加'article_id' => $article_id,到这里,我们的准备工作做好了,然后在ArticleController中的show($id)方法使用:

Visitor::log($id);

有了数据之后我们可以将它展示给用户看,在展示文章的页面写上类似下面的内容:

{{ count($article->visitors) }} 浏览

打完收工,很开心。

Happy Hacking

php博客浏览人数,在博客中实现浏览次数的统计相关推荐

  1. 分享制作精良的知识管理系统 配置SQL Server文档数据库 完美实现博客文章的的下载,存储和浏览...

    前一篇文章<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>已经提到如何使用Site Rebuild来下载您所喜欢的博客文章,但是还不能实现把下载的文件导入进数据库中, ...

  2. 用Github Pages+Hexo搭建博客之(八)Hexo博客Next主题添加统计文章阅读量(访问量/浏览量/阅读次数)功能

    [置顶][专栏]用Github Pages+Hexo搭建博客 文章目录 [置顶][专栏][用Github Pages+Hexo搭建博客](https://blog.csdn.net/qq_342439 ...

  3. 为什么写博客?如何在博客中更好的分享?

    为什么要写技术博客呢?主要是受一本书的启发,这本书叫<软技能--代码之外的生存指南>,乐于分享就是其中的一项软技能.写技术博客是对自己已有知识和经验的总结和归纳,便于日后温故而知新,也把自 ...

  4. 如何统计博客园的个人博客访问量

    使用过新浪博客的人都知道,新浪博客的首页有访问量统计功能,迁移到博客园之后发现博客园却没有这项功能,所幸博客园在后台管理的设置选项中有一个公告栏和设置页首页脚代码功能,使用起来非常灵活和方便.借此我们 ...

  5. 博客秘诀:超人气博客是怎样炼成的(提升博客人气不可不用的绝招)

    博客秘诀:超人气博客是怎样炼成的(提升博客人气不可不用的绝招) 基本信息 原书名: ProBlogger: Secrets for Blogging Your Way to a Six-Figure ...

  6. JAVA个人博客系统毕业设计,个人博客系统设计与实现,个人博客网页设计毕设作品

    功能清单 [后台管理员功能] 系统设置:设置关于我们.联系我们.加入我们.法律声明 会员列表:查看所有注册会员信息,支持删除 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表, ...

  7. 很多朋友问我:什么是博客?为什么要博客!

    自己搞了这个博客,也推荐给我的同学.好友及各位网友,目的是提高大家对自己的认识!可很多朋友问我什么是博客?为什么博客等类似问题? 今天我就整理了网络上对博客定义及意义帖出来! 什么是博客 博客,数字生 ...

  8. 各家博客比较——CSDN、博客园、简书、知乎专栏、Github Page、个人建站

    有一种论调是程序员都应该写一些博客.那么作为转行的小白当然是按照前辈们的尊尊教诲来实行.那么就有会疑问,写博客到底有什么用处.哪些人需要写博客呢? 写博客到底有什么作用?我们从三个角度看待问题,博主. ...

  9. 如何在 CSDN 中增加博客访问量 史上最简单的博客教程 学会之后博客访问量直线上升。

    蹭热度 如何蹭是问题.下面分几点 你发布的有关技术是什么 你发布的是否是别人发布过的东西 你发布的东西在别人是怎样搜索的. 其实重点在流量,也就是点击.点击到位了,无论你文章来自哪里,或者说抄自哪里, ...

最新文章

  1. python常见错误-Python错误及异常总结汇总
  2. SVN入门:流程简介 安装配置 项目库配置 客户端 上线方案
  3. java properties文件 安全_java 数据库读取工具类(读取config.properties配置文件)[包含线程安全] | 学步园...
  4. 门面模式(Facade)
  5. 华为Mate 40 Pro屏幕贴膜曝光:双孔曲面屏实锤?
  6. CF959A Mahmoud and Ehab and the even-odd game
  7. Luogu1502 窗口的星星
  8. Tableau 自定义调色板及应用全流程讲解【保姆级】
  9. python直方图教程_Matplotlib绘制直方图
  10. Makefile中wildcard使用方法
  11. Java并发常见面试题(二)
  12. CLCL和ClipX:最实用的剪贴板增强工具,免费超小
  13. MySQL Workbench 使用教程 - 如何使用 Workbench 操作 MySQL / MariaDB 数据库中文指南
  14. Centos7离线安装autoconf
  15. 20210905 Ax=b的解的三种情况
  16. 医学免疫学 Chapter4:抗体
  17. vgg 16模型的内存和参数量的计算
  18. 三极管工作原理分析(转载)
  19. JAVA深度学习框架DJL之鞋子分类
  20. Android定时自动启动应用程序

热门文章

  1. ServletContext讲解
  2. debian10 更换阿里源
  3. 发送快递:配置静态路由
  4. 神经网络为什么需要多次epoch
  5. Mysql分页order by数据错乱重复
  6. MyBatis——XML配置解析
  7. ARM研发进展与企业清单
  8. 重型车辆盲区行为检查Behaviours – Heavy Vehicle Blind Spots
  9. HiLink LiteOS IoT芯片 让IoT开发简单高效
  10. Android中出现内存泄露的原因