2011-09-08 3 views
1

나는 다음과 같은 관계가 있습니다CakePHP의 : 반복적으로 인출하지 hasMany의 모델 협회

사이트 - hasMany의 - Sitekey Sitekey - belongsTo를 - 사이트

sites.id가 기본 키 sitekeys.site_id이

주요 외국이다

사이트 모델 : var $ hasMany = array ('Sitekey');

쿼리 : $ this-> find ('all', array ('조건'=> 배열 ('Sitekey.keyword_id'=> $ 키), '재귀'=> 1));

해당 연결로 재귀 적으로 페치 ('all'찾기)가 작동하지 않습니다. 명시 적으로 클래스 이름, 외래 키 등을 정의하려고 시도했습니다.

마지막 도랑 노력으로 사이트 모델을 다음과 같이 변경해 보았습니다. var $ hasOne = array ('Sitekey');

재귀 적으로 'all'을 찾으면 조인을 수행하고 데이터를 올바르게 반환합니다. 내가 잘못하고있는 일이나 문제를 디버깅/수정하는 데 사용할 수있는 기술에 대한 아이디어가 있습니까?

감사합니다.

답변

0

이렇게 간단 할 수 있습니까? 여러분이 사용했던 $ this 키워드는 (컨트롤러에 있다고 가정 할 때) 모델이 아닌 컨트롤러의 인스턴스가됩니다. 따라서 결과는 컨트롤러의 기본 모델을 기반으로합니다. 컨트롤러가 쿼리하려는 모델을 "사용"하고 있는지 확인하십시오.

$results = $ModelName->find('all', array('conditions' => array('Sitekey.keyword_id' => $key), 'recursive' => 1)); 

나는 또한 수용 가능한 행동을 조사하는 것이 좋습니다. 재귀 적으로 사용하는 것보다 더 많은 제어 권한을 얻습니다.

2

hasMany (및 belongsTo)를 지정할 때 클래스와 키를 제공 해본 적이 있습니까? 인플가 제대로 singularize와 명사를 복수형으로하지 않을 때 나를 위해

var $hasMany = array('Sitekey' => array(
    'className' => 'Site', 
    'foreignKey' => 'site_id' 
)); 

이 발생합니다. 나는 이것을 항상 먼저 확인하는 연습을했습니다.

이것이 작동하는 경우 이론적으로 왜 인식하지 못하는지 살펴 봐야합니다. 다른 모델 막대 (또는 알고있는 다른 단어)를 만들고 sitekey와 동일한 연결을 지정하고 사이트에서 작동하는지 확인하십시오. 그렇다면 Sitekey에서 가장 가능성있는 선택기입니다.