我已经创建了hasManyThrough表,如下所示:
id user_id friend_id
我也有用户表如下:Id用户名密码
我想有user_id和friend_id belongsTo关系与用户的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?
OK,似乎错误是由于Zend优化器根据一些论坛。这是在烘焙时产生分割错误!
我无法在第三方托管服务器中关闭此功能,因此我可能必须移动到本地服务器并进行测试,以便我可以看到Cake错误。
OK下面是错误(它很长,所以我不打算把所有的,但下面给出一点想法):
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}()
最有可能的问题是由于嵌套的朋友模型构造,这是由于使用相同的别名的朋友为用户和朋友表。我猜是这样的:
- 正在初始化的朋友模型,它在模型绑定期间初始化用户模型。
- 现在当用户模型初始化时,在它的绑定过程中,它试图用别名User绑定朋友模型,但是由于模型中使用了单例模式,而不是朋友模型实例ClassRegistry返回User的实例,导致用户模型绑定到自己。
与先初始化User的情况类似。更改关系的别名,如Friend_2,或者别的什么,即不要在模型关系中重复Alias。
看看我在CakePHP中的回答:Can't get follow-system to work。这是一样的,但与朋友而不是追随者。
你只是用user_id(用户ID)字段和child_user_id(朋友ID)创建一个user_users表,你可以再次使用user_users表来创建类似的关系,例如User HABTM追随者,User HABTM追随者
很抱歉回复晚了,我以为我一天前发布了答案,但显然它没有发布。