Cakephp互惠好友系统

Posted

技术标签:

【中文标题】Cakephp互惠好友系统【英文标题】:Cakephp reciprocal friendship system 【发布时间】:2011-10-14 10:49:36 【问题描述】:

我已经尝试了一周左右的时间,如何在 Cakephp 中制作一个合适的友谊系统。我已经阅读了this 和this 线程,但我无法让它工作。

我已经阅读了更多关于此的主题,但似乎没有人有合适的例子。

我目前有一个表 users(id、用户名、密码、电子邮件等)和一个表 Friendships(id、user_to、user_from、status)。

第 1 步 - 好友请求

如果用户发出了友谊请求,则插入一行,其中包含请求的 user_id 和请求友谊的用户的 user_id,因此它可能如下所示:

标识 |用户来自 |用户至|状态


1 | 1 | 2 | 0

这样我可以通过选择 user_to = 2 的所有记录轻松显示 user_id = 2 的待处理朋友

第 2 步 - 确认友谊

我已经设置好让user_id 2现在看到user_id 1想加好友,如果他点击确认链接,状态会变成1,见下

标识 |用户来自 |用户至|状态


1 | 1 | 2 | 1

我创建了各种检查以使行保持唯一。

第 3 步 - 向朋友展示

我认为这很容易,如果我想显示 user_id = 1 的朋友,那么我只需使用 user_from = 1 或 user_to = 1 进行选择,但这不起作用。

User_id 1 可以是请求者,但也可以被请求,所以 JOIN 会显示奇怪的结果。

有人知道解决办法吗?如果我没有做正确的事情,我很高兴重建整个系统!任何正确方向的提示也欢迎......

【问题讨论】:

【参考方案1】:

这是我的解决方案:困难在于正确的请求,因为可以跨越好友请求(如果 A 询问 B 或 B 询问 A,则将相反的方式存储在表的“to”和“from”字段中) .让我们这样做,用户 UNION 和别名可以独立于下面的关系表从任何用户那里获取朋友。

    [friends] 表(关系):to|from|statut(pending,confirmed) “to”和“from” > foreign_keys 约束到 [users] 表

下面的请求总是给出想要的结果! (将 %d 替换为 SESSION 中的用户 ID 或用户 ID

SELECT
    users.userNickname,
    friends.to AS friendUser,
    friends.from AS currentUser,
    friends.statut
    FROM
    users
        INNER JOIN
        friends
        ON
        users.userId = friends.to
    WHERE
    friends.from = '%d' 
UNION
    SELECT
    users.userNickname,
    friends.from AS friendUser,
    friends.to AS currentUser,
    friends.statut
    FROM
    users
        INNER JOIN
        friends
        ON
        users.userId = friends.from
    WHERE
    friends.to = '%d'

【讨论】:

【参考方案2】:

您可以通过这种方式找到 ID = 1 的好友请求:

select * from Users u1 where u1.user_to = 1 and u1.user_from not in (select u2.user_to
from Users u2 where u2.user_from = u1.user_to)

您可以通过这种方式找到来自 ID = 1 的好友请求:

select * from Users u1 where u1.user_from = 1 and u1.user_to not in (select u2.user_from
from Users u2 where u2.user_to = u1.user_from)

您可以通过这种方式找到 ID = 1 的相互友谊:

select * from Users u1 where ((u1.from = 1) or (u1.to = 1)) and 0 < (select count(*) from
Users u2 where u1.from = u2.to and u1.to = u2.from)

此代码未经测试,但您明白了。

【讨论】:

以上是关于Cakephp互惠好友系统的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 私人消息系统

将结果从 RabbitMQ 队列推送到 CakePHP 前端

cakePHP 内存缓存逻辑不起作用

CakePHP代码保护加密版权所有[复制]

CakePHP 限制关联

Cakephp 1.3:如何迁移到我的文章标签 - 功能