일반 바닐라 모델에서 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
레코드가 모두 User
인 Company
레코드뿐만 아니라 모든 User
레코드를 검색합니다.
recursive = 1
에서 Cake는 지정된 모델을 검색하고 모든 직접 연관을 파싱합니다. $this->User->find('all')
은 모두 User
개의 레코드뿐만 아니라 User
이 속한 Company
레코드와 User
에 속하는 모든 PhoneExtension
레코드를 검색합니다.
recursive = 2
에서는, 케이크, 지정된 모델을 검색 직접적인 협회 직접적인 협회의 및 모든 연관을 모두 분석합니다.$this->User->find('all')
는 예 모델 관계 도면에서 모두 검색 할 모든 User
레코드의 Company
기록되는 User
기록에 속하는 모든 PhoneExtension
레코드가 User
속하는 모든 Department
및 Address
레코드가 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'
)
)
));