2011-11-08 3 views
0

I가 다음과 같은 데이터베이스 테이블 : 다음 모델 협회와CakePHP의 함유 성 행동은 예상대로 작동하지

products 
******** 
id 
title 
artist_id 

artists 
******* 
id 
profile 
rating 
person_id 

people 
****** 
id 
full_name 

: 제가 함유 성 동작을 사용하는 세 가지 모델의 각을 설정 한

Product Model 
************* 
public $belongsTo = array(
    'Artist' => array(
     'className' => 'Artist' 
     'foreignKey' => 'artist_id' 
    ) 
); 

Artist Model 
************ 
public $belongsTo = array(
    'Person' => array(
     'className' => 'Person' 
     'foreignKey' => 'person_id' 
    ) 
); 
public $hasMany = array(
    'Product' => array(
     'className' => 'Product' 
     'foreignKey' => 'product_id' 
    ) 
); 

Person Model 
************ 
public $hasOne = array(
    'Artist' => array(
     'className' => 'Artist' 
     'foreignKey' => 'person_id' 
    ) 
); 

다음을 사용 :

public $actsAs = array('Containable'); 

나는 다음을 사용하여 예술과 함께 제품 세부 사항을 얻을 때 IST의 이름 :

$this->Product->find('first', array('conditions' => array('Product.id' => $id), 'contain' => 'Person.full_name')) 

나는 경고 얻을 :

Model "Product" is not associated with model "Person" 

을 그리고은 제품 세부 사항은 더 아티스트의 이름을 즉 얻을. 왜 이런 일이 일어나는 걸까요?

답변

2

당신이 Product 모델에 find 작업을 호출하기 때문에 이런 일이, 그리고 PersonArtist의 관계에 의해 간접적으로 Product 관련 직접하지 ,하지만. 이

array(
    [Product] => array(...), 
    [Artist] => array(
     [Person] => array(
      'full_name' => '...' 
     ) 
    ) 
) 
같은 결과를 반환합니다

$this->Product->find('first', array(
    'conditions' => array('Product.id' => $id), 
    'contain' => array('Artist' => 'Person.full_name') 
)); 

:이 경우, contain 배열은 다음과 같이해야한다