Passionate Engineer
Passionate Engineer

Reputation: 10422

Cakephp hasManyThrough relationship with user_id being used twice

I have created hasManyThrough table like below:

id user_id friend_id

I also have users table like below: id username password

I want to have both user_id and friend_id belongsTo relation with user's id column. So I have written below two models:

Friend model

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' => ''
            )
        );
    }

User model

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' => ''
        )
    );
}

I'm not sure why but when I try to view this via controller in scaffolding, it comes up with 500 server error?? Is there something wrong with the model config that is creating wrong SQL?

OK it seems like error is due to Zend Optimizer according to some forums. This is creating Segmentation Fault when baking!

I cannot turn off this in the third party hosted server so I might have to move to my local server and test so I can see Cake errors.

OK below is the error (it's very long so I'm not going to put all but below gives a bit of an idea):

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}() 

Upvotes: 0

Views: 451

Answers (2)

Kevin Vandenborne
Kevin Vandenborne

Reputation: 1387

Look at my answer in CakePHP Twitter-clone: Can't get follow-system to work. It`s the same but with friends rather then followers.

You just make a user_users table with a user_id (User ID) field and child_user_id (Friend ID), you can use the user_users table again to make similar relations eg user HABTM followers, user HABTM followers

Sorry for the late response, I thought I posted the answer a day ago but clearly it didn't post.

Upvotes: 0

while1
while1

Reputation: 3370

Most probably problem is occurring due to nesting of Friend Model construct and which is occurring due to use of same alias of Friend for User and Friend table has well. Here is what happening i guess:

  1. Friend Model being initialized, which in its constructs during model binding initialize User Model.
  2. Now when User Model is initialized, during its binding Process, It Tries to bind Friend Model with alias as User, but due to use of Singleton pattern in Models, Instead of Friend Model instance ClassRegistry returns instance of User, resulting User model binding to itself.

Similarly is the case when User is Initialized first.Change Alias of relations like Friend_2, or something else, ie Dont repeat Alias in Model relations.

Upvotes: 0

Related Questions