0

私は3つのテーブルを持っています:-ユーザー-投稿-サブスクリプション(デフォルトではposts_users(nn)である必要があります)

サブスクリプションテーブルは、この関係に必要なnnテーブルです。ユーザーと投稿の関係が多いため、システムが非常に混乱するため、「posts_users」とは呼びたくありませんでした。

、hasAndBelongsToMany関係を作成するために、私はこれを行いました:

投稿(モデル):

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

ユーザー(モデル):

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

ID 3のユーザーのサブスクライブされた投稿を検索したいとします。ユーザーのサブスクライブされた投稿のデータを取得するために検索を行う方法はありますか?どのモデルでクエリを実行する必要がありますか?どのように??

ありがとう。

4

1 に答える 1

0

Ok。ついにできた。

2つの関連するモデルのいずれかからクエリを実行できます。この場合、投稿またはユーザー

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

これにより、現在のユーザーの(subscriptions配列内の)サブスクライブされたチケットが返されます。

于 2012-10-17T10:26:10.623 に答える