2014-01-17 2 views
1

(관계) : 나는 케이크에 3 개 테이블을 연결하는 방법을cakephp에 3 개의 테이블을 연결하는 방법? 내가 3 개 테이블이

user: 
id;name 

usercompany: 
id;user_id, company_id 

company: 
id;company_name 

? 나는 어떤 회사가 사용자에게 연결되어 있는지 볼 수 있기를 원합니다. 사용자는 둘 이상의 회사에 속할 수 있습니다.

사용자 컨트롤러에서 나는 $ this-> User-> find ("all")를 사용하기 만하면 연결된 회사의 모든 사용자 (회사 이름 포함)를 보여줘야합니다.

케이크에서 어떻게 할 수 있습니까? 나는 무엇을 사용해야합니까? 통찰력에 감사드립니다.

1 단계 :

+2

[수동] (http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html)을 살펴 보았습니까? – arilia

답변

2

설명서를 보지 않았다고 생각합니다. 알아야 할 것은 모두 this page입니다.

이것은 HABTM, hasAndBelongsToMany 연관입니다. 귀하의 조인 테이블은 CakePHP 협약을 따르지 않습니다. 이름은 반드시 companies_users로 지정해야합니다. See the page about conventions. 컨벤션을 따르지 않으면 사용중인 테이블, 모델 및 외래 키를 어디에서나 선언해야합니다. 레거시 DB이고 변경할 수 없다면 괜찮습니다. 그러나 새로운 응용 프로그램이라면 프레임 워크 규칙을 따라야합니다. 더 쉽게 작업을 수행 할 수 있습니다.

사용자 < -> CompaniesUser < -> 회사 당신은뿐만 아니라 "다른 측면"회사 모델에 ASSOC를 정의해야합니다

class User extends AppModel { 
    public $hasAndBelongsToMany = array(
     'Company' => 
      array(
       'className' => 'Company', 
       'joinTable' => 'companies_users', 
       'foreignKey' => 'user_id', 
       'associationForeignKey' => 'company_id', 
       'with' => 'CompaniesUser' 
      ) 
    ); 
} 

.

페이지 매김 쿼리에서 사용자의 모든 회사를 가져 오려면 define the joins manually이어야합니다. 이를 수행하는 방법을 설명하는 많은 질문과 대답이 있으므로 here is an one, another one.

1

이 단계를 수행 User.php, UserCompany.php 및 Company.php

라는 이름의 3 개 모델을 만들기

2 단계 : 내부 User.php

var $hasMany = array(
'UserCompany' => array(
    'className'  => 'UserCompany', 
    'foreignKey' => 'user_id' 
) 
); 

3 단계 : 내부 UserCompany.php

var $hasMany = array(
    'Company' => array(
     'className'  => 'Company', 
     'foreignKey' => 'company_id' 
    ) 
    ); 

4 단계 : 컨트롤러에서 $ this-> U ser-> find ("all")