2010-05-10 2 views
0

CakePHP에 대한 이해를 가진 누군가가 내가 가지고있는 질문에 대해 밝힐 수 있기를 바랬습니다.CakePHP 모델 링키지의 객체는 얼마나 광범위합니까?

여기에 내가 UserUser 차례로 많은 Department 많은 Address이있는 Company을 가지고 있고, 내 시나리오입니다. User을 얻으려면 Company에 액세스 할 수 있고 모든 모델은 Company과 연결할 수 있습니까?

따라서 $user['Company']['Department'][0] 또는 $user['Company']['Address'][0]이 가능합니까?

원래 질문으로 돌아가며, 모델 간의 연결은 얼마나 광범위합니까?

답변

4

일반 바닐라 모델에서 Cake 모델 링키지는 모델의 recursive 속성에 의해 결정됩니다. 귀하의 예를 모델 관계는 다음과 같이 보입니다 : (. 나는 다음과 같은 설명을 구체화하기 위해 추가의 관계 (User hasMany PhoneExtension)를 추가 한)

User 
-> belongsTo Company 
    -> hasMany Department 
    -> hasMany Address 
-> hasMany PhoneExtension 

Model::recursive 세 허용되는 값이 있습니다

: -1, 0, 1 및 2입니다. 각 값은 Cake의 ORM에 다른 깊이를 표시하여 모델 레코드를 검색합니다. 차이점을 설명하기 위해 $this->User->find('all')을 사용하겠습니다. recursive = -1에서

  • 는, 케이크는 지정된 모델 (즉. User)를 검색합니다. 모델 연관성을 파싱하지 않습니다.

  • recursive = 0에서 Cake는 지정된 모델을 검색하고 belongsTo 연관을 구문 분석합니다. $this->User->find('all')User 레코드가 모두 UserCompany 레코드뿐만 아니라 모든 User 레코드를 검색합니다.

  • recursive = 1에서 Cake는 지정된 모델을 검색하고 모든 직접 연관을 파싱합니다. $this->User->find('all')은 모두 User 개의 레코드뿐만 아니라 User이 속한 Company 레코드와 User에 속하는 모든 PhoneExtension 레코드를 검색합니다.

  • recursive = 2에서는, 케이크, 지정된 모델을 검색 직접적인 협회 직접적인 협회의 모든 연관을 모두 분석합니다.$this->User->find('all')는 예 모델 관계 도면에서 모두 검색 할 모든 User 레코드의 Company 기록되는 User 기록에 속하는 모든 PhoneExtension 레코드가 User 속하는 모든 DepartmentAddress 레코드가 Company 속하는. 그래, 당신이 recursive = 2에서 귀하의 질문에 당신이 나타내는 결과를 얻을 수 있다는 말의 매우 긴 방법입니다

. 당신이 깊은recursive = 2 당신을 얻는 것보다 가고 싶어하면

, 당신은 Containable behaviour 사용해야합니다. Department 모델에 추가 연결이 있다고 가정 해 보겠습니다. hasMany Group. 따라서 우리는 recursive = 2 검색에있어 모든뿐만 아니라 모든 관련 Group 기록을 검색 할 수

User 
-> belongsTo Company 
    -> hasMany Department 
     -> hasMany Group 
    -> hasMany Address 
-> hasMany PhoneExtension 

,이처럼 Model::find 전화를 만들 것입니다 :

$this->User->find('all', array(
    'contain' => array( 
     'PhoneExtension', 
     'Company' => array(
      'Department' => array('Group'), 
      'Address' 
     ) 
    ) 
)); 
0

귀하가 필요로하거나 원하는만큼 광범위합니다. find() 패밀리의 recursive 옵션을 확인하십시오. 또한 Containable 동작. 당신이 목록을 특정 참조는하지만, 직접 사용자로 가능합니다 :의 회사를 통해 많은 부서 을 갖는 사용자로 그것의

$user['Department'][0] 

생각합니다.

0

클래스/개체에 액세스하고 "$this->recursive = -1"으로 설정하면 종속성이없는 개체 만 반환됩니다.