2

私はアスリートのテーブルを持っています。アスリートには、アスリートでもあるコーチがいます。アスリートは複数のコーチを持つことができます。

これを処理するために、id フィールド、athlete_id フィールド、coach_id フィールドを持つ結合テーブルを使用するアスリート テーブルを作成しました。アスリート ID とコーチ ID の両方のフィールドは、アスリート テーブルの id フィールドを指しています。

通常、Cake の慣習に従って、両方のフィールドにアスリート ID という名前を付ける必要がありますが、その処理方法を示す次のリンクを見つけました: http://book.cakephp.org/1.2/view/851/Multiple-同じモデルとの関係

Cake の慣習に従って、結合テーブルの名前をattusters_athletes にしますが、それが正しく機能するかどうかはわかりません。これをアスリート_コーチと呼ぶのは理にかなっているように思えますが、それは Cake の自動機能を壊す可能性があるに違いありません。

これは、athletes_athletes という名前の結合テーブルで機能しますか? これは正しい方法ですか?より良い方法はありますか?

4

1 に答える 1

10

ここでの質問に答えるのはこれが初めてなので、回答が標準的でない場合は事前にお詫び申し上げます。少し前に、HABTM の自己結合を持つユーザー モデルを使用してソーシャル ネットワーキング アプリを作成しました。「friends_users」の結合テーブルを想定すると、ユーザー モデルの関連付けは次のようになります。

public $hasAndBelongsToMany = array(
'Friend' => array(
    'className' => 'User',
    'joinTable' => 'friends_users',
    'foreignKey' => 'user_id',
    'associationForeignKey' => 'friend_id', 
    'unique' => true
)
);

特定のユーザーのすべての友達の名前のリストを作成したいと仮定すると、次のようなことができます。

<ul>
<?php foreach($user['User']['Friend'] as $friend): ?>
<li><?php echo $friend['name']; ?></li>
<?php endforeach; ?>
</ul>

したがって、HABTM アソシエーションでテーブルの新しい名前、foreignKey および associatedForeignKey を指定して正しくオーバーライドする限り、結合テーブルの名前は問題ありません (私は今でもケーキの命名規則に従うようにしています)。ケーキのデフォルト。したがって、あなたの場合、Athlete モデルで次のようなことができます (athletes_coaches の結合テーブルを想定):

public $hasAndBelongsToMany = array(
'Coach' => array(
    'className' => 'Athlete',
    'joinTable' => 'athletes_coaches',
    'foreignKey' => 'athlete_id',
    'associationForeignKey' => 'coach_id', 
    'unique' => true
)
);

特定のアスリートのコーチのリストを表示するには (おそらくアスリートのビュー メソッドで)、次のようにします。

<ul>
<?php foreach($athlete['Athlete']['Coach'] as $coach): ?>
<li><?php echo $coach['name']; ?></li>
<?php endforeach; ?>
</ul> 
于 2012-07-08T22:57:39.283 に答える