在Laravel上写的站点事件时间线的数据库结构

时间:2014-11-08 18:50:32

标签: php mysql laravel eloquent

我正在构建时间轴,它将显示用户所做的所有事情(事件)。 示例事件:

  • 用户已加入网站(注册)

  • 用户添加了帖子

  • 用户创建的公共活动

  • 用户加入了一些随机组。

  • 用户已在论坛或论坛中添加评论。

问题是我不知道如何构建数据库,这将保留所有事件并在时间轴中显示它们。

视觉示例:

timeline enter image description here

我正在使用雄辩的Laravel。我想所有可以引发事件的动作,他们会听取它们并将所有事件添加到数据库事件表中。

例如,当用户注册,引发事件并将数据放入数据库时​​,脚本将从数据库获取所有事件并按日期构建它们。

但问题是所有事件都有不同的内容,例如,当用户注册时,我只需要存储指向用户表的注册用户外键,但是当用户创建帖子时,我需要存储他的外键,和指向创建帖子的外键。

所以问题是如何构建数据库,保留所有事件以便在时间轴上显示它们,假设每个动作的事件内容可能不同?

1 个答案:

答案 0 :(得分:2)

我会使用多态关系:

http://laravel.com/docs/4.2/eloquent#polymorphic-relations

所以你的事件表看起来像这样

Events
  id
  user_id
  eventable_id
  eventable_type
  event_class

您将拥有用户关系和可发生的多态关系,这可能指向帖子或返回给用户(用于注册)。

我还添加了一个event_class字段,它可以存储一个类的名称来处理事件的显示方式(例如,你可以有一个类来处理New Post事件)。我甚至可以省略它并以某种方式从eventable_type列解析处理程序类。

根据您希望它的工作方式,您还可以将标题和正文存储在数据库表中,但我更喜欢使用类来动态生成它。