2

我有一张运动员桌。运动员有教练,教练也是运动员。运动员可能有多名教练。

为了处理这个问题,我创建了一个运动员表,它使用一个带有 id 字段、运动员 ID 字段和 Coach_id 字段的连接表。运动员 ID 和教练 ID 字段都指向运动员表的 id 字段。

通常,根据 Cake 约定,我必须将我的两个字段都命名为运动员 ID,但我发现以下链接显示了如何处理它: http ://book.cakephp.org/1.2/view/851/Multiple-同模型关系

根据 Cake 的约定,我将加入表命名为运动员运动员,但我不确定它是否能正常工作?将其称为运动员教练似乎是有意义的,但我敢打赌这可能会破坏 Cake 的自动功能。

这是否适用于被称为运动员运动员的连接表?这是正确的方法吗?有没有更好的办法?

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 以便正确覆盖,您将连接表命名为什么并不重要(我仍然尝试遵循良好的蛋糕命名约定)蛋糕默认值。所以在你的情况下,你可以在你的运动员模型中做这样的事情(假设有一个运动员教练的连接表):

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 回答