在CakePHP 2上做一个类似Twitter的跟随者和转推系统的正确方法?

时间:2012-11-02 02:46:10

标签: php cakephp twitter has-and-belongs-to-many

我是CakePHP的新手。我到处寻找这个,但我似乎无法做到正确,或找到任何方向。我仍然不了解整个HABTM的工作原理,我期待从中学到更多。

我正在尝试使用类似Twitter的系统,包括用户和关注者,帖子(推文)和分享(转推)。我已经设置了用户和帖子模型,并为关注者(用户和用户之间)和共享(用户和帖子之间)连接表。我该如何设置模型关联?我一直在尝试几种方法,但我不确定我是否做得对。

另一个问题是,什么是正确的查找查询,以获取我关注的人发布的所有帖子,以及他们共享的帖子,而不会获得所有不必要的数据,如用户信息等,只是帖子中的一个阵列?是否有可能在一个查询中查找,或者我应该做几个然后合并数组?另外,理解如何正确过滤和限制这种相当复杂的查询(在某些日期范围之间获得“发布时间线”,将帖子限制为一定数量,或两者兼而有之)将非常有用。

我知道我的问题有点傻,但我发誓我做了很多研究,我似乎无法做到正确。所以任何帮助,特别是查询部分,将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

所以这些将是一些奇怪的关系。我觉得你应该有以下表格:

  • 用户(带别名粉丝)有很多推文
  • 帖子所属用户
  • UsersFollowers(HABTM表)

要仅在三个表上执行此操作,Posts将需要是一个线程表。实质上,如果某人转发(分享)帖子,则会在新帖子parent_id列中创建包含原始帖子ID的新记录。然后,当调用记录时,模型可以提取其他数据并将其包含在Feed中。

Users的别名方面允许跟随者部分只在一个表中完成。要查找某个人的关注者,请使用该表的一个关键字(follower_id)进行搜索,然后找到一个人关注的人,只需使用另一个关键字(users_id)进行搜索即可。

至于问题的第二部分,在此设置中查找应该非常简单,但您可能希望阅读Containablethreaded queries。您可以在表格中包含时间戳列,以便稍后可以按日期功能(或发布时间轴)进行搜索。