0

私の質問は、この答えに関連しています。 https://stackoverflow.com/a/8773953/1297775

@decezeが次のように述べていることを、私は多くの場所で読みました。 「」

CakePHPの本でさえ、それを示唆していますhttp://book.cakephp.org/2.0/en/models/saving-your-data.html#what-to-do-when-habtm-becomes-complicated

彼がこのHABTMの記録を「管理する」と言ったとき、彼は...

1)モデルにHABTMリレーションをまったく作成せず、結合テーブルのモデルを作成します

また

2)モデルにHABTMリレーションを作成しますが、$ this-> FirstModel-> JoinModel-> saveAll($ someData);を使用するだけでは、コントローラーコードでは使用しません。

ありがとう

4

1 に答える 1

2

基本的に、 hasManyThrough関係を使用する必要があります。これは本質的に手動で HABTM を設定して、関係に追加データ (作成日/有効期限など) を追加できるようにするものです。非常に簡単です。モデルを作成してそれらを結合し、モデルで法線belongsTohasManyプロパティを使用するだけです。ここでは、ユーザー/メンバーシップ/コースの簡単なセットアップを示します。

class User extends AppModel {
    public $hasMany = array('Membership');
}

class Course extends AppModel {
    public $hasMany = array('Membership');
}

class Membership extends AppModel {
    public $belongsTo = array('User', 'Course');
}

membershipsテーブルに必要なフィールドは (少なくとも) と のみcourse_idですuser_id

これで、Cake がこれを HABTM として扱い、レコードを保存するたびにその自動マジックを使用することなく、通常のモデルとしてメンバーシップ モデルを操作できます。counterCacheメンバーシップ モデルでクール s を使用して、コースのユーザー数などをカウントすることもできます。

于 2012-06-21T12:46:36.080 に答える