【问题标题】:Add a friend feature in CakePHP在 CakePHP 中添加好友功能
【发布时间】:2011-02-06 05:38:18
【问题描述】:

我需要在我的应用程序中添加一个简单的朋友功能,通过一些研究,我需要一个连接表链接回用户表?像这样:(我已经有一个用户表)

用户-友谊-用户

谁能提供更多细节?

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    友谊表应该有以下列:

    id Integer
    user_from (the user who requested friendship)
    user_to (the user who accepted friendship)
    created (optional to track when your friendship started)
    

    然后你需要创建适当的模型关系。

    class User extends AppModel {
       ...
       var $hasMany = array(
          'UserFrom'=>array(
             'className'=>'Friendship',
             'foreignKey'=>'user_from'
          ),
          'UserTo'=>array(
             'className'=>'Friendship',
             'foreignKey'=>'user_to'
          )
       );
       var $hasAndBelongsToMany = array(
          'Friendship' => array(
              'className' => 'User',
              'joinTable' => 'friendships',
              'foreignKey' => 'user_from',
              'associationForeignKey' => 'user_to'
       );
       ...
    }
    
    class Friendship extends AppModel {
       ...
       var $belongsTo = array(
          'UserFrom'=>array(
             'className'=>'User',
             'foreignKey'=>'user_from'
          ),
          'UserTo'=>array(
             'className'=>'User',
             'foreignKey'=>'user_to'
          )
       )
       ...
    }
    

    这样你在每个模型中定义了 2 个关系。您也可以添加 HABTM 关系。运行烘焙脚本来构建你的控制器和视图。然后在你的代码中你可以使用这样的东西:

    $this->User->UserFrom->find('all', 
        array(
            'conditions'=>array('user_from'=>1), 
            'contain'=>array('UserTo')
        )
    );
    

    这应该返回 ID 为 1 的用户的朋友和所有朋友的详细信息。

    小心递归查询。 :)

    【讨论】:

    • 嗨 Nik,关于 HABTM 的关系,我不需要使用 HABTM 吗?如果是这样,这将如何影响您在上面编写的模型关系?我还是有点糊涂。为了运行烘焙,我会烘焙友谊,对吗?我可以知道你上面写的最后一个代码我应该把它放在哪里吗?谢谢..
    • 我不应该在关系模型中使用 joinTable 吗?
    • 友谊表将是连接表。我已经编辑了我的帖子,您可以看到示例 HATBM 定义。实际上我还没有真正测试过这个,但是它应该这样做。请记住,如果您有很多用户,则不能选择 HABTM,因为长列表不是很方便的查找人员的方法:)
    • 嗨 Nik,我仍然认为它不会起作用,我怀疑表友谊必须有一个名为 user_id 的外键。不管怎么说,还是要谢谢你。我正在尝试..
    • 外键是在HABTM关系中定义的,所以应该是个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2020-07-19
    • 2011-03-27
    相关资源
    最近更新 更多