0

我正在使用 CakePHP 2 开发追随者/关注系统。我已经使用用户表和 user_users 表设置了我的数据库。users 表是包含系统上每个用户的主表,而 user_users 表包含关注者的记录。

然后我有一个UsersController、User 模型和Follower 模型。

我可以成功输出一个按钮来表示关注或关注,具体取决于当前登录的用户是否关注他们正在查看的个人资料所属的用户,但是我无法理解如何做的是创建新的关注关系在表中。换句话说,我不知道如何在 user_users 表中创建记录。

我不确定这个逻辑应该去哪里,因此我的“关注”按钮应该指向什么。

这可能是一个非常简单的问题,但我完全被难住了。我尝试向 UsersController 添加“关注”操作,但无法使其正常工作。

非常感谢任何帮助,邓肯

4

1 回答 1

2

HATBM 不适合这种情况。从食谱

HABTM 数据被视为一个完整集,每次添加新的数据关联时,数据库中的完整关联行集都会被删除并再次创建,因此您始终需要传递整个数据集以进行保存。有关使用 HABTM 的替代方法,请参阅 hasMany through(连接模型)

出于这个原因,HABTM 主要适用于非常“愚蠢”的关系。我已经在诸如用户必须选择许多兴趣的情况下使用它 - 他们只是得到一个复选框列表,他们可以在其中单击多个兴趣,然后一键保存它们。

在您的情况下,拥有一个带有自己模型的单独表格会更容易。我称之为关系或类似的东西。它将有一个 id、followed_by_id、following_id 以及您可能需要的任何其他字段。

我从一个旧的 cake 1.3 应用程序中挖掘了一些代码,但它应该可以帮助你。您的关系模型如下所示:

<?php
class Relationship extends AppModel {
    var $name = 'Relationship';

    var $belongsTo = array(
        'FollowedBy' => array(
            'className' => 'User',
            'foreignKey' => 'followed_by_id'
        ),
        'Following' => array(
            'className' => 'User',
            'foreignKey' => 'following_id'
        )
    );
}
?>

您的用户模型必须具有如下关系:

var $hasMany = array(
    'Followers' => array(
        'className' => 'Relationship',
        'foreignKey' => 'following_id',
        'dependent'=> true
    ),
    'FollowingUsers' => array(
        'className' => 'Relationship',
        'foreignKey' => 'followed_by_id',
        'dependent'=> true
    ),

);

然后在你的关系控制器中,你会有这样的方法:

function add($following_id = null) {
    $this->Relationship->create();
    $this->Relationship->set('followed_by_id',$this->Auth->User('id'));
    $this->Relationship->set('following_id',$following_id);
    $this->Relationship->save();
    $this->redirect($this->referer());
}

function delete($id = null) {
    $this->Relationship->delete($id);
    $this->redirect($this->referer());
}

请注意,在该代码中,我正在使用 GET 请求修改数据库——我真的不应该这样做(这是多年前的旧代码)。您需要对 add 和 delete 方法都执行 POST 请求,因为它们正在修改数据库。

但是,该代码应该让您走上正确的轨道。

于 2013-08-07T11:30:16.153 回答