我正在使用CakePHP 2从事关注者/关注系统。 我使用users表和user_users表设置了我的数据库。 users表是包含系统上每个用户的主表,而user_users表包含关注者的记录。
然后我有一个UsersController,User模型和Follower模型。
我可以成功输出一个按钮,根据当前登录的用户是否跟随他们正在查看的个人资料所属的用户,跟随或关注,但是我无法理解该怎么做,是创建表中新的以下关系。换句话说,我不知道如何在user_users表中创建记录。
我不确定这个逻辑应该去哪里,因此我的“跟随”按钮应该指向什么。
这可能是一个非常简单的问题,但我完全被难过了。我曾尝试向UsersController添加“跟随”操作,但我无法让它工作。
任何帮助非常感谢, 邓肯
答案 0 :(得分:2)
HATBM不适合这种情况。来自the cookbook:
HABTM数据被视为一套完整的集合,每次都是新数据 关联是在数据库中添加完整的关联行集 被删除并再次创建,所以你总是需要通过整个 用于保存的数据集。有关使用HABTM的替代方法,请参阅hasMany 通过(加入模型)
出于这个原因,HABTM主要适用于非常“愚蠢”的关系。我已经在用户必须选择多个兴趣的情况下使用它 - 他们只是获得一个复选框列表,他们可以点击多个兴趣,并将它们全部保存在一个点击中。
在您的情况下,使用自己的模型单独使用表会更容易。我称之为关系或类似的东西。它将具有id,followed_by_id,following_id以及您可能需要的任何其他字段。
我从旧蛋糕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请求修改数据库 - 我真的不应该这样做(这是几年前的旧代码)。您将要为添加和删除方法强制执行POST请求,因为他们正在修改数据库。
但是,这段代码应该让你走上正轨。