2013-04-30 3 views
1

다음과 같은 상황이 있습니다. 나는 questions이라는 데이터베이스 테이블을 참조하는 모델을 가지고있다. 질문 테이블에는 parent_id이라는 키 참조가 포함되어 있으므로 질문에 부모가있을 수 있습니다. 이 상위는 동일한 테이블의 질문 레코드입니다. 일부 질문은 실제로 최종 사용자가 함께 살펴야 할 질문 모음이기 때문입니다.자체를 참조하는 CakePHP 모델

다음으로 내 데이터베이스에이 동작을 모델링하기 위해 노력했다

:

public $hasMany = array(
    'AttemptedQuestions' => array('classname' => 'AttemptedQuestions'), 
    'Questions' => array('className'=>'Questions', 'foreignKey'=>'parent_id') 
); 

편집 : 그래서 이상한 점은 다음과 같이 질문 컨트롤러에 내 데이터가 잘 참조 할 수 있다는 것입니다 :

$test_question = $this->Question->find('all', array('conditions' => array('id' => 25))); 

정확히 내가 원하는대로 할 것입니다. 질문과 그 자녀가있는 일련의 데이터가 반환됩니다. 부모 질문의 parent_id이있는 질문은 $test_question['Questions']으로, 질문은 $test_question['Children']으로 문의하십시오. 내가 이해할 수없는 것은 Tests 같은 다른 컨트롤러에서이 모델을 참조하면 자식 배열을 반환하지 않는다는 것입니다. 질문 부분 만 반환됩니다. 모델의 데이터는 현재 사용중인 컨트롤러에 따라 어떻게 달라 집니까? 이 동작은 이상하게 보일뿐 아니라 데이터베이스에서 자식을 가져 오는 방법을 알고 싶습니다. 시간 내 주셔서 감사합니다.

+0

당신이 내 질문을 편집 한 세 번째 같이해야합니다. 여기서 무엇을 편집 했습니까? – usumoio

+3

"mvc"태그를 제거하고 "cakephp-appmodel"태그를 추가했습니다. 우선 CakePHP는 MVC 나 다른 MVC에서 영감을받은 패턴을 구현하지 않기 때문에. 실제로 PHP 용 Rails 설정을 모방 한 것입니다. 그리고 귀하의 질문은 실제로 [Active Record] (http://www.martinfowler.com/eaaCatalog/activeRecord.html) 구현 인 CakePHP 프레임 워크의'AppModel' 구조에 관한 것입니다. –

+0

@IamJohnGalt : 마지막 편집 시간 (http://i.imgur.com/Hbk1P3I.png) –

답변

2

'classname'키는 모델 classname과 일치해야합니다. abritrary가 아닙니다. 따라서 :

class Question extends AppModel { 
    public $hasMany = array(
     'ChildQuestion' => array('className'=>'Question', 'foreignKey'=>'parent_id') 
    ); 
} 

$ hasMany 배열 키 (즉, "ChildQuestion")는 임의적 일 수 있습니다. 이 결과에 나타납니다.


보너스 : 당신이 아이의 질문의 부모를 취득해야하는 경우, 추가 :이 @teresko

public $belongsTo= array(
     'ParentQuestion' => array('className'=>'Question', 'foreignKey'=>'parent_id') 
    );