2011-10-20 42 views
0

我创建hasManyThrough表如下图所示:与USER_ID 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}() 
+0

不要查找错误编号。检查错误是关于什么。 –

+0

Protip:始终在本地服务器上开发,绝不在远程/生产服务器上开发。 – JJJ

+0

OK找到了原因! 我无法使用与相关型号名称相同的关联名称!朋友改朋友已经解决了这个问题! –

回答

0

最有可能发生问题,由于朋友模型嵌套构造和正在发生,因为使用相同的别名朋友为用户和朋友表有良好。下面是我猜想的事情:

  1. 朋友模型正在初始化,它在模型绑定过程中的初始化用户模型。
  2. 现在,当用户模型被初始化时,它的结合过程中,它会尝试朋友模型绑定别名作为用户,但是由于使用在模型Singleton模式相反朋友Model实例ClassRegistry的,的返回用户的情况下,所得的用户模型绑定到自己。

同样是当用户初始化像Friend_2, 或别的东西,即关系first.Change别名不重复别名在模型关系的情况。

+0

嗨Shrey抱歉,这不是目前正在发生的事情。您需要重复别名,并且需要在两个与HasMany Through表格相关的模型上进行匹配。这个问题与使用与模型名称相同的别名相关。 –

+0

其实我在回答中提到了同样的事情,但是我无法很好地解释它。我的回答中的拼写错误使得它更容易混淆。 – while1

0

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

您只需打个USER_USERS表为user_id(用户ID)字段和child_user_id(朋友ID),您可以再次使用USER_USERS表作出类似的关系,例如,用户HABTM追随者,用户HABTM追随者

对不起迟到的回应,我想我前一天发布了答案,但显然没有发布。