1

現在のプロジェクトに取り組んでいたとき、かなり複雑な問題に遭遇しました。私は今、私の問題をより詳細に指摘します:

User、UsersExtendedField、UsersExtended の3 つのモデルがあります。

UsersExtendedField には、手動で管理できるカスタム フィールドが含まれています。すべてのカスタム フィールドは [ユーザー] ビューにも表示でき、もちろん入力することもできます。次に、値は、user_id と field_id の 2 つのforeignKey を持つ UsersExtended に格納されます。

関係は次のようになります。

問題: ユーザー ビューにアクセスすると、ユーザー情報を入力するフォームが表示されます。すべての UsersExtendedFields も利用可能であり、これらには多数の UsersExtended があるため、多くの UsersExtended 値があります。しかし、それらを現在ビューが表示されているユーザーに属する値のみに減らしたいと思います。これが私の(望ましい)関係です:

Croogo::hookBehavior('User', 'Crooboard.ExtendedUser', array(
'relationship' => array(
    'hasMany' => array(
        'UsersExtendedField' => array(
            'className' => 'Crooboard.UsersExtendedField',
            'foreignKey' => '',
            'conditions' => array('status' => 1)
            ),
        ),
    ),
));

class UsersExtendedField extends AppModel {
var $name = 'UsersExtendedField';
var $displayField = 'fieldname';

var $hasMany = array(
    'UsersExtended' => array(
        'className' => 'Crooboard.UsersExtended',
        'foreignKey' => 'field_id',
                    'conditions' => array(
                           'UsersExtended.user_id = User.id'
                    )
    ),
);

}

これは完全なコードではなく、重要な部分です。問題は、「UsersExtended.user_id = User.id」と書いたところから始まります。明らかに、これは機能しません。しかし、ここで User.id にアクセスする方法がわかりません。また、このタスクを解決するための HABTM 構造を想像することもできませんでした。この「UsersExtended.user_id = User.id」のセマンティクスを機能させる方法を知っていますか?

これを読んで助けてくれてありがとう!

4

1 に答える 1

0

HABTM 関係を適切に設定する必要があるようです。

外部キーを含む結合テーブル UsersExtended が既にあります。以前の関係をすべて削除し、User および UserExtendedField モデルのそれぞれで HABTM をセットアップします。

User モデルの関係コードは次のようになります。

var $hasAndBelongsToMany = array(
                              'UsersExtended' => array(
                                  'className' => 'UsersExtended',
                                  'joinTable' => 'UsersExtended',    //assuming this is the
                                                                     //name of that model's table
                                  'foreignKey' => 'user_id',
                                  'associationForeignKey' => 'field_id'                             
                              )
                          );

詳細については、cakephp ブックのページを参照してください。

さらに、このブログ投稿は、cakephp を学んでいたときに関係の概念を理解するのに役立ちました。

于 2012-03-13T18:02:15.477 に答える