我正在构建时间轴,它将显示用户所做的所有事情(事件)。 示例事件:
用户已加入网站(注册)
用户添加了帖子
用户创建的公共活动
用户加入了一些随机组。
用户已在论坛或论坛中添加评论。
问题是我不知道如何构建数据库,这将保留所有事件并在时间轴中显示它们。
视觉示例:
我正在使用雄辩的Laravel。我想所有可以引发事件的动作,他们会听取它们并将所有事件添加到数据库事件表中。
例如,当用户注册,引发事件并将数据放入数据库时,脚本将从数据库获取所有事件并按日期构建它们。
但问题是所有事件都有不同的内容,例如,当用户注册时,我只需要存储指向用户表的注册用户外键,但是当用户创建帖子时,我需要存储他的外键,和指向创建帖子的外键。
所以问题是如何构建数据库,保留所有事件以便在时间轴上显示它们,假设每个动作的事件内容可能不同?
答案 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列解析处理程序类。
根据您希望它的工作方式,您还可以将标题和正文存储在数据库表中,但我更喜欢使用类来动态生成它。