计算文章观点

时间:2018-03-16 15:44:57

标签: php laravel laravel-5

我创建了一个简单的应用程序来计算文章的视图。在数据库中,articles表有一个列view_count。我也有一个明确的事件&每次查看某篇文章时都会增加view_count的侦听器:

问题,如何更新view_count,并存储在数据库中..?!

App \ Events \ ArticleViews.php:

class ArticleViewsextends Event
{
    use SerializesModels;

    public $article;

    public function __construct(Article $article)
    {
        $this->article = $article;
    }

    public function broadcastOn()
    {
        return [];
    }
}

App \ Listeners \ IncrementArticleViewsCounts.php:

class IncrementArticleViewsCounts
{
    public function __construct()  { }

    public function handle(ArticleViewsextends $event)
    {
        $event->article->increment('view_count');
    }
}

在ArticleController.php@show中:

$articles= new Scholarship();

Event::fire(new ArticleViewsextends ($scholarships));

parent::$data['articles'] = $articles->getAllActiveArticlesForFrontEnd(parent::$data['language']);

在视图中不计算。

2 个答案:

答案 0 :(得分:0)

我猜你需要在你的听众中使用

public function handle(ArticleViewsextends $event)
{
    $event->article->increment('view_count'); // Update your object
    $event->article->save(); // update the database
}

答案 1 :(得分:0)

@Loek回答是正确的。但是你想要考虑一件事。如果你真的不想跟踪谁正在查看文章,你只想计算一篇特定文章的观看次数,那么它就会多余来点击数据库。(sql)。每次都会导致无用的查询你希望增加一个观看次数。 我建议你应该在这种情况下尝试使用nosql。像Redis一样 代码应该看起来像

  Route::get('/article/{article}', function (Article $article) {
  Redis::zincrBy('views', 1, $article);//or any other key name
  return $article;
  });

这将为您提供额外的工具,以获得最多观看的文章 与

 $articles= Redis::zrevrange('views', 0, -1);

有关详情,请查看here

相关问题