Ada*_*dam 2 php cakephp has-and-belongs-to-many cakephp-model
我有一张运动员的表.运动员有教练,他们也是运动员.运动员可能有多名教练.
为了解决这个问题,我创建了一个运动员表,它使用带有id字段的连接表,athlete_id字段和coach_id字段.athlete_id和coach_id字段都指向运动员表到id字段.
通常,根据Cake约定,我必须将我的两个字段命名为athlete_id,但我找到了以下链接,说明如何处理:http: //book.cakephp.org/1.2/view/851/Multiple-关系到最相同的模型
根据Cake约定,我会将我的联名表命名为athlete_athletes,但我不确定它是否能正常运行?将它称为Athle_coaches似乎有意义,但我敢打赌,这可能会打破Cake的自动功能.
这是否可以将join表称为athlete_athletes?这是正确的方法吗?有没有更好的办法?
小智 9
这是我第一次回答这里的问题,所以如果我的回答是非标准的,我会提前道歉.不久前,我写了一个社交网络应用程序,其用户模型有HABTM自我加入.假设有一个'friends_users'的连接表,我的用户模型关联看起来像这样:
public $hasAndBelongsToMany = array(
'Friend' => array(
'className' => 'User',
'joinTable' => 'friends_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'friend_id',
'unique' => true
)
);
Run Code Online (Sandbox Code Playgroud)
假设我想为特定用户创建所有朋友的名字列表,我可以做这样的事情.
<ul>
<?php foreach($user['User']['Friend'] as $friend): ?>
<li><?php echo $friend['name']; ?></li>
<?php endforeach; ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
因此,只要您在HABTM关联中指定表的新名称,foreignKey和associatedForeignKey以便正确覆盖,那么您对连接表的命名(我仍然尝试遵循良好的蛋糕命名约定)并不重要蛋糕默认值.所以在你的情况下你可以在你的运动员模型中做这样的事情(假设有一个运动员教练联合表):
public $hasAndBelongsToMany = array(
'Coach' => array(
'className' => 'Athlete',
'joinTable' => 'athletes_coaches',
'foreignKey' => 'athlete_id',
'associationForeignKey' => 'coach_id',
'unique' => true
)
);
Run Code Online (Sandbox Code Playgroud)
并且为了显示特定运动员的教练列表(可能在运动员的视图方法中),您可以执行以下操作:
<ul>
<?php foreach($athlete['Athlete']['Coach'] as $coach): ?>
<li><?php echo $coach['name']; ?></li>
<?php endforeach; ?>
</ul>
Run Code Online (Sandbox Code Playgroud)