2014-07-15 3 views
0

CakePHP 2.0에는 구독자 모델과 SubscriberGroup 모델이 있습니다. 이들은 서로 HABTM으로 연결되어 있습니다.CakePHP : HABTM 조인 테이블에서 연관 검색

SubscriberGroup 편집 작업에서이 그룹의 가입자 목록을 얻고 싶습니다.이 그룹은 HABTM 관계가 정의 될 때 문제가되지 않습니다. 그러나 연관 테이블 인 subscriber_groups_subscribers에는 author_id 필드가 있습니다.이 필드는 다른 테이블에 대한 외래 키입니다 (users).

$ this-> SubscriberGroups-> read()를 수행 할 때 그룹과 구독자뿐만 아니라 연결을 만든 사용자에 관한 사용자 테이블의 세부 정보도 가져 오려고합니다. 사용자 지정 쿼리를 정의하지 않고 할 수있는 방법은

public $hasAndBelongsToMany = array(
    'Subscriber' => array(
     'className' => 'Subscriber', 
     'joinTable' => 'subscriber_groups_subscribers', 
     'foreignKey' => 'subscriber_group_id', 
     'associationForeignKey' => 'subscriber_id', 
     'fields' => 'id,first_name,last_name,email_address,last_error', 
     'unique' => 'keepExisting' 
    ) 
); 

거기에 다음과 같이

HABTM 관계는 정의?

$options = array(
    'contain' => array(
     'Subscriber', 'Author' 
    ) 
); 

$data = $this->SubscriberGroup->find('all', $options); 

을 그리고 SubscriberGroup 모델에 함유 성 동작을 설정하는 것을 잊지 마세요 :

+0

당신은'belongsTo' (또는'hasOne') relat '구독자'와'저자 '사이의 이온화? 그렇다면'$ this-> SubscriberGroup-> recursive'를'3'으로 설정하십시오. – Holt

+0

홀트 - 나는 가입자가 아니라 관계의 저자를 찾고 있습니다. – user884248

+0

죄송합니다. 질문에 한 줄을 건너 뛰었습니다 ... CakePHP에 사용자 정의 필드와의 HABTM 관계에 "깨끗한"것이 있는지 확실하지 않습니다. 나는 HABTM 테이블을위한 모델을 만들고이 모델과'Author','Subscriber' 및'SubscriberGroup' 모델 사이에'belongsTo'와'hasOne' 관계를 추가 할 것입니다. – Holt

답변

0

글쎄, 당신은 아마 containable behavior을 사용할 수 있습니다이를 달성하기 위해!

class SubscriberGroup extends AppModel { 
    public $actsAs = array('Containable'); 
} 
0

내가 CakePHP의를 사용하여 3 개 테이블과 HABTM 관계를 만들 수있는 방법, 심지어 HABTM 하나 추가 필드가 복잡가 없다 생각합니다.

가장 쉬운 방법은 "링크"모델을 만들고 SubscriberGroup 모델에 hasOne 관계를 추가하는 것입니다 그리고

class LinkModel extends AppModel { 

    public $useTable = 'subscriber_groups_subscribers' ; 

    public $actAs = array('Containable') ; 

    public $belongsTo = array(
     'Subscriber', 
     'Author', 
     'SubscriberGroup' 
    ) ; 

} 

class SubscriberGroup extends AppModel { 
    public $actAs = array('Containable') ; 

    public $hasMany = array(
     'LinkModel' 
    ) ; 
} 

, 여기 당신이 read에 전화로 무엇을 얻을 수 있습니다 :

$this->SubscriberModel->recursive = 2 ; 
$res = $this->SubscriberModel->read(null, 1) ; 
debug($res) ; 

출력 :

array(
    'SubscriberGroup' => array(
     'id' => '1' 
    ), 
    'LinkModel' => array(
     (int) 0 => array(
      'id' => '2', 
      'author_id' => '1', 
      'subscriber_id' => '3', 
      'subscriber_group_id' => '1', 
      'Subscriber' => array(
       'id' => '3' 
      ), 
      'Author' => array(
       'id' => '1' 
      ), 
      'SubscriberGroup' => array(
       'id' => '1' 
      ) 
     ), 
     (int) 1 => array(
      'id' => '3', 
      'author_id' => '1', 
      'subscriber_id' => '1', 
      'subscriber_group_id' => '1', 
      'Subscriber' => array(
       'id' => '1' 
      ), 
      'Author' => array(
       'id' => '1' 
      ), 
      'SubscriberGroup' => array(
       'id' => '1' 
      ) 
     ), 
     (int) 2 => array(
      'id' => '4', 
      'author_id' => '2', 
      'subscriber_id' => '1', 
      'subscriber_group_id' => '1', 
      'Subscriber' => array(
       'id' => '1' 
      ), 
      'Author' => array(
       'id' => '2' 
      ), 
      'SubscriberGroup' => array(
       'id' => '1' 
      ) 
     ) 
    ) 
)