Cakephp与user_id的两次使用有很多关系

时间:2011-10-20 09:52:08

标签: php mysql cakephp

我创建了hasManyThrough表,如下所示:

id user_id friend_id

我也有如下用户表: id用户名密码

我希望user_id和friend_id属于与用户id列的关系。所以我在下面写了两个模型:

朋友模特

class Friend extends AppModel {
    var $name = 'Friend';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

        var $belongsTo = array(
            'User' => array(
                'className' => 'User',
                'foreignKey' => 'user_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            ),
            'Friend' => array(
                'className' => 'User',
                'foreignKey' => 'friend_id',
                'conditions' => '',
                'fields' => '',
                'order' => ''
            )
        );
    }

用户模型

class User extends AppModel {
    var $name = 'User';
    var $displayField = 'username';
var $hasMany = array(
        'User' => array(
            'className' => 'Friend',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Friend' => array(
            'className' => 'Friend',
            'foreignKey' => 'friend_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
}

我不知道为什么但是当我试图通过脚手架中的控制器来查看它时,它会出现500服务器错误?模型配置是否存在创建错误SQL的错误?

好吧似乎错误是由Zend Optimizer根据某些论坛引起的。这在烘焙时会产生分段错误!

我无法在第三方托管服务器中关闭此功能,因此我可能需要移至本地服务器并进行测试,以便查看Cake错误。

确定下面是错误(它很长,所以我不打算把所有这些都放在下面给出一点想法):

Fatal error: Maximum function nesting level of '100' reached, aborting! in /usr/share/php/cake/libs/debugger.php on line 248 Call Stack: 0.0011 352048 1. {main}() 

2 个答案:

答案 0 :(得分:0)

最常见的问题是由于Friend Model构造的嵌套而发生,并且由于对User和Friend表使用相同的 Friend 别名而发生这种问题。这就是我猜的:

  1. 初始化的朋友模型,在模型绑定期间在其构造中初始化用户模型。
  2. 现在初始化User Model时,在其绑定过程中,它尝试将Friend Model与别名绑定为User,但由于在Models中使用了Singleton模式,而不是Friend Model实例ClassRegistry返回User的实例,从而导致User模型绑定自己。
  3. 首先用户初始化的情况也是如此。更改像Friend_2这样的关系的别名, 或其他东西,即不要在模型关系中重复别名。

答案 1 :(得分:0)

CakePHP Twitter-clone: Can't get follow-system to work中查看我的答案。它是相同的,但与朋友而不是追随者。

您只需创建一个user_users表,其中包含user_id(用户ID)字段和child_user_id(朋友ID),您可以再次使用user_users表来建立类似的关系,例如用户HABTM关注者,用户HABTM关注者

对于迟到的回复感到抱歉,我以为我在一天前发布了答案,但很明显它没有发布。