2012-07-08 1 views
2

나는 선수들의 테이블을 가지고 있습니다. 선수들에게는 코치가 있으며 선수들도 있습니다. 선수는 여러 코치를 가질 수 있습니다.CakePHP는 케이크 자동화를 깨지 않고 HABTM 테이블을 자체 가입합니다.

이 문제를 해결하기 위해 id 테이블, athlete_id 필드 및 coach_id 필드가있는 조인 테이블을 사용하는 운동 선수 테이블을 만들었습니다. athlete_id 및 coach_id 필드는 운동 선수 테이블로 다시 id 필드를 가리 킵니다.

일반적으로는, 케이크 규칙에 따라, 내 필드 모두 athlete_id 이름을 할 것입니다,하지만 난 그것을 처리하는 방법을 보여줍니다 다음 링크를 발견 : http://book.cakephp.org/1.2/view/851/Multiple-relations-to-the-same-model

이 케이크 규칙에 따르면, 내가 이름을 붙여 내 테이블 athletes_athletes에 가입하십시오. 그러나 올바르게 작동하는지 잘 모르겠습니다. athletes_coaches라고 부르는 것이 합리적 일지 모르겠지만 Cake의 자동 기능이 손상 될 수 있습니다.

join 테이블이 athletes_athletes라고하는이 작업을 수행 할 수 있습니까? 이것이 올바른 방법일까요? 더 좋은 방법이 있습니까?

답변

9

내 대답이 비표준 인 경우 여기에 대한 질문에 처음 대답하므로 미리 사과드립니다. 너무 오래 전 HABTM 자체 참여가있는 User 모델로 소셜 네트워킹 앱을 작성했습니다. 나는 이런 식으로 뭔가를 할 수있는 나는 특정 사용자에 대한 모든 친구의 이름의 목록을 작성하고 싶다고 가정

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

: A는 'friends_users'의 테이블을 조인 가정 내 사용자 모델 협회는 다음과 같이보고 .

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

그래서 정말 당신이 이름을 중요하지 않는 테이블을 조인 (난 아직 시도하고 좋은 케이크 이름 지정 규칙을 따라야) 당신이 당신의 HABTM 협회 테이블의 외래 키의 새 이름을 지정할만큼 및 associatedForeignKey는 Cake 기본값을 올바르게 재정의합니다.

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

그리고 아마도 선수의보기 방법 (특정 선수에 대한 코치의 목록을 표시 : 귀하의 경우 귀하의 선수 모델에서 같은 것을 할 수 있도록 (a는 athletes_coaches의 테이블을 조인 가정)) 다음과 같이 할 수 있습니다.

<ul> 
<?php foreach($athlete['Athlete']['Coach'] as $coach): ?> 
<li><?php echo $coach['name']; ?></li> 
<?php endforeach; ?> 
</ul> 
+1

첫 번째 답변 – dynamic