2011-09-22 2 views
1

현재 프로젝트를 진행할 때 다소 복잡한 문제가 발생했습니다. 지금 내 문제를 더 자세히 설명해 드리겠습니다.CakePHP/Croogo : Veery complex associations

세 개의 모델 : User, UsersExtendedField 및 UsersExtended가 있습니다.

UsersExtendedField에는 수동으로 관리 할 수있는 사용자 지정 필드가 있습니다. 모든 사용자 정의 필드는 사용자보기에도 표시 될 수 있으며 물론 채워질 수 있습니다. 그런 다음 값은 UserExtended에 저장됩니다. UsersExtended에는 user_id와 field_id라는 두 개의 foreignKeys가 있습니다.

관계는 다음과 같습니다. : 사용자 hasMany UsersExtendedField, UsersExtendedField hasMany UsersExtended, UsersExtended belongsTo User, UsersExtendedField.

문제 : 사용자보기에 액세스 할 때 사용자 정보가 입력 된 양식이 표시됩니다. 모든 UsersExtendedFields도 사용할 수 있으며, ManyMemberExtended 때문에 UsersExtended 값이 충분히 있습니다. 그러나 나는 그 사용자의보기가 현재 보여지고있는 값 (들) 만 줄이기를 원한다. 여기 내 (원하는) 관계가 있습니다 :

Croogo::hookBehavior('User', 'Crooboard.ExtendedUser', array(
'relationship' => array(
    'hasMany' => array(
     'UsersExtendedField' => array(
      'className' => 'Crooboard.UsersExtendedField', 
      'foreignKey' => '', 
      'conditions' => array('status' => 1) 
      ), 
     ), 
    ), 
)); 

class UsersExtendedField extends AppModel { 
var $name = 'UsersExtendedField'; 
var $displayField = 'fieldname'; 

var $hasMany = array(
    'UsersExtended' => array(
     'className' => 'Crooboard.UsersExtended', 
     'foreignKey' => 'field_id', 
        'conditions' => array(
          'UsersExtended.user_id = User.id' 
        ) 
    ), 
); 

} 

이것은 전체 코드가 아니며, 중요한 부분입니다. 문제는 바로 내가 'UsersExtended.user_id = User.id'라고 쓴 곳에서 시작됩니다. 분명히, 이것은 작동하지 않을 것이다. 하지만 여기에 User.id에 액세스하는 방법을 알지 못합니다. 또한이 작업을 해결하기 위해 HABTM 구조를 상상할 수도 없었습니다. 이 'UsersExtended.user_id = User.id'의 의미를 작동시키는 방법을 알고 있습니까?

시간을내어 읽고 나를 읽어 주셔서 감사합니다.

답변

0

HABTM 관계를 올바르게 설정해야하는 것처럼 들립니다.

이미 외래 키가 들어있는 조인 테이블 UsersExtended가 있습니다. 모든 이전 관계를 제거하고 각 User 및 UserExtendedField 모델에서 HABTM을 설정하십시오.

귀하의 사용자 모델의 관계 코드는 다음과 같습니다

var $hasAndBelongsToMany = array(
           'UsersExtended' => array(
            'className' => 'UsersExtended', 
            'joinTable' => 'UsersExtended', //assuming this is the 
                    //name of that model's table 
            'foreignKey' => 'user_id', 
            'associationForeignKey' => 'field_id'        
          ) 
         ); 

을 자세한 내용 이외에 page in the cakephp book

을 확인, this blog post 내가 CakePHP의 학습 때 나 관계의 개념을 파악 도왔다.