2011-03-19 2 views
1

실제 데이터베이스가없는 더미 컨트롤러 인 "Reports"컨트롤러에서 다른 모델의 페이지 매김보기를 생성하려고합니다.loadModel을 사용하는 동안 재귀가있는 페이지 매김

$this->loadModel('Transactions'); 
$this->Transactions->bindModel(array('belongsTo'=>array('Item'=>array('className'=>'Item'),'Member'=>array('className'=>'Member')))); 
$results = $this->paginate('Transactions',null,array('recursive'=>1)); 

을하지만이 나에게 항목 및 회원들로부터 관련 데이터를 제공하지 않습니다 예를 들어, 나는 다음과 같은 일을 해요 "거래"모델의 페이지가 매겨진보기를 생성합니다. 내가 할 경우

$this->Transactions->find('all',array('recursive'=>1)) 

나는 관련 데이터를 얻지 만 페이징되지 않습니다. 관련 데이터를 포함하는 페이지 매김 된 뷰는 어떻게 얻을 수 있습니까?

답변

2

두 가지 : 여러 모델 이름이 이상한 이유로 작동 할 수 있다고해도, 모델 이름은 $this->loadModel('Transaction');과 같이 단수입니다. the manual on naming conventions을 참조하십시오.

둘째, recursive을 잊어 버리고 Containable 동작으로 이동하십시오. 솔직히, 왜 이것이 기본 프로세스가 아닌지 궁금해하기 때문에 유용합니다 (아마도 프레임 워크가 매우 성숙되었을 때 Containable이 만들어 졌기 때문일 것입니다). Matt은 Containable이 좋은 이유를 설명하는 a good book을 가지고 있습니다 (실제로 다운로드하십시오, 필수 항목 : D). 트랜잭션 모델에서

:

var $belongsTo = array(
    'Item' => array(
     'className' => 'Item', 
     'foreignKey' => 'item_id', 
    ) 
); 

1)과 같은 모델의 연결을 정의 :하지만 더 많은 도움을, 당신이 함유 성으로 문제를 해결하는 방법을 정확하게 알려거야 항목 모델에서

:

var $hasMany = array(
    'Transaction' => array(
     'className' => 'Transaction', 
     'foreignKey' => 'item_id', 
     'dependent' => true, 
     'exclusive' => true, 
    ) 
); 

은 회원 모델에 대해 동일한 작업을 수행합니다.

2)이 코드 /app/app_model.php 파일을 만듭니다 합니다 ($actsAs 변수를 여기에 AppModel이 클래스가 함유 성 사용하는 모든 모델을 알려줍니다 이내)

<?php 
class AppModel extends Model { 
    var $recursive = -1; 
    var $actsAs = array('Containable'); 
} 
?> 

3) 보고서 컨트롤러에 코드를 변경 (contains 매개 변수는 포함하려는 모든 연관된 모델의 배열이며, 하나의 assoc. model 또는 all 또는 원하는 것을 포함 할 수 있습니다.)

$this->loadModel('Transaction'); 
$this->paginate = array('Transaction' => array('contain' => array('Item', 'Member')));  
$results = $this->paginate('Transaction'); 

그리고 그게 전부입니다!

+0

신성한 **. 그런 단순한 실수! 나는 2 년 동안 Cake를 사용 해왔고, 모델명으로 단수로 대신 복수형을 사용하고 있다는 사실을 발견 할 수 없었습니다 !! 나는 그것이 어째서 작동하지 않는지 어제부터 머리를 깨고있다. @ YOMorales, 시간 내 주셔서 감사합니다. 당신은 정말로 날카로운 눈을 가졌습니다. :) 그리고 나는 Containable에 대해 알고 있습니다, 나는 게시하기 전에 그것을 시도했습니다. 나는 당신이 말한 것에 동의합니다. 수용 할 수있는 것이 더 나은 관행입니다. 나는 v1을 쓰기 전에 케이크를 사용 했었습니다. 오래 전에 버틸 수있을 것 같았습니다. D – Ashok

+0

쿨! 그때 이후로 Cake를 사용 해왔다. 오랫동안 사용자와 이야기하는 것이 좋습니다. 어쨌든 이상한 것은 여러 모델 이름이 예제 코드에서 작동한다는 것입니다. 이상 하네, 네. – YOMorales

+0

최근 Matt의 모든 링크가 손상된 것 같습니다. 아무도 그 전자 책에 대한 작동 링크를 알고 있습니까? –