2009-10-16 3 views
0

Cake에서 단항 연관을 만들기위한 지름길이 있습니까?CakePhp에서 단항 연관을 만드는 방법은 무엇입니까?

예를 들어, 사용자는 다른 사용자의 친구입니다. 어려운 방법으로 시도하고 협회를 직접 코딩하면 케이크 규칙을 어기는 것이 확실합니다.

var $hasAndBelongsToMany = array(
    'User' => 
     array(
      'className' => 'User', 
      'joinTable' => 'friends', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'friend_id', 
      'unique' => true 
     ) 
); 

윌이 작품 :

케이크 HABTM이있다? 사용자 모델은 다른 사용자 모델과 결합합니다.

업데이트 : 지금 데이터를 어떻게 저장합니까?

$this->data["Friend"] = $request["Requester"]; 
$this->data["Admirer"] = $request["Requestee"];       
$this->Friend->create(); 
$this->Friend->save($this->data); 

$ request [ "Requester"]와 $ request [ "Requestee"]는 모두 User 유형의 객체를 보유합니다. HABTM를 확인해은 사용자 모델에 정의 된 모든 그렇게

var $hasAndBelongsToMany = array(
     'Friend' => array(
      'className' => 'Friend', 
      'joinTable' => 'friends', 
      'foreignKey' => 'user_id', 
      'associationForeignKey' => 'id' 
     ), 
     'Admirer'=>array(
      'className'=>'Friend', 
      'joinTable'=>'friends', 
      'foreignKey' => 'friend_id', 
      'associationForeignKey' => 'id',    
     ) 
    ); 

는 $ 데이터이다 -의 ID가 친구 테이블의 id 컬럼에 저장된> [ "친구"]

답변

0

CakePHP의에서 $ hasMany, $ belongsTo 및 $ hasAndBelongsToMany와 같이 모델에서 사용할 수있는 변수가 여러 개 있습니다. 자세한 설명은 요리 책을 참조하십시오 .. http://book.cakephp.org/view/78/Associations-Linking-Models-Together.

예를 들어 HABTM이 필요하다고 생각합니다.

+0

그냥 그 모든 모델을 읽을 전송 정말 도움이되지이다 -teh

 <?php class User extends AppModel { public $useTable='users'; public $hasAndBelongsToMany=array( 'Friend'=>array( 'className'=>'User', 'joinTable'=>'followers', 'foreignKey' => 'user_id', 'associationForeignKey' => 'friend_id', ), 'Admirer'=>array( 'className'=>'User', 'joinTable'=>'followers', 'associationForeignKey' => 'friend_id', 'foreignKey' => 'user_id', ), ); } 

. 그는 분명히 이미했다. –

1

비요른,

그는 사용자 HABTM 사용자에 대한 질문입니다 ...

당신의 users_users해야 테이블에 가입하고 관계는 내가 그은을해야한다고 생각이

var $hasAndBelongsToMany = array(
     'Friend' => 
       array(
         'className' => 'UserUser', 
         'joinTable' => 'users_users', 
         'foreignKey' => 'user_id', 
         'associationForeignKey' => 'friend_id', 
         'unique' => true 
       ) 
); 

과 같아야합니다 트릭

+0

'친구'는 사용자가 아닌 별도의 모델과 컨트롤러를 가지고 있습니까? –

+1

join 테이블은 users_users라고 부르지 않지만 * Cake의 automagic을 사용하려면 join 테이블이 있어야합니다. –

+0

또한 className 값이 모델 이름 인 경우 "User"여야합니다. 'with'=> 'UsersUser'를 통해 원하는 경우 조인 테이블을 정의 할 수 있지만 조인 테이블에 추가 HABTM 데이터가있는 경우에만 필요합니다. –

3

다음은 예제 응용 프로그램에서 사용하는 해결책입니다.

두 명의 테이블이 필요합니다 (사용자와 팔로워). 중요한 필드는 User-> id, Follower-> user_id, Follower-> friend_id입니다.

이 스 니펫이 도움이되기를 바랍니다.

+1

단 하나의 모델 이름 형식과 일치 시키려면 '친구'대신 '친구'를 사용하고 '친구'대신 '친구'를 사용하는 것이 좋습니다. 그 외에도 이것은 좋은 접근 방법입니다. –

관련 문제