0

I have 3 tables: - users - posts - Subscriptions (which should be by default posts_users (n-n))

The subscriptions table is the n-n table needed for this relation. I didnt want to call it "posts_users" as it is very confusing for my system because i have more relations between users and posts.

The, to create the hasAndBelongsToMany relation, i did this:

Post (model):

    public $hasAndBelongsToMany = array(
        'Subscriptions' => array(
                'className' => 'User',
                'joinTable' => 'subscriptions',
                'foreignKey' => 'post_id',
                'associationForeignKey' => 'user_id',
                'unique' => 'keepExisting',
                'conditions' => '',
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'finderQuery' => '',
                'deleteQuery' => '',
                'insertQuery' => ''
        )
);

User (model):

    public $hasAndBelongsToMany = array(            
    'Post' => array(
        'className' => 'Post',
        'joinTable' => 'subscriptions',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'post_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

Lets say i want to find the subscribed posts for the user with id 3. Is there any way to do a find to retrieve data of subscribed Posts for a user? In which model should i do the query? How??

Thanks.

Alvaro
  • 40,778
  • 30
  • 164
  • 336

1 Answers1

0

Ok. Finally i got it.

You can do the query from any of the two related models. In this case Post or User.

$this->Post->User->find('all', array(
            'conditions' => array('User.id' => $this->Session->read('Auth.User.id')),
            'contain' => array('Subscriptions')
));

This would return the subscribed tickets (in the subscriptions array) for the current user.

Alvaro
  • 40,778
  • 30
  • 164
  • 336