CakePHP 모델이 다시 변환되지 않고 테이블을 변경할 수 있습니까?
-
19-09-2019 - |
문제
나는 객체의 각 인스턴스에 관련 레코드가있는 데이터베이스에 자체 테이블이있는 변하지 않는 레거시 데이터베이스 스키마로 작업하고 있습니다. 모델을 변경해야합니다 useTable
모델이 인스턴스화 될 때마다 케이크의 멋진 캐싱과 그렇지 않은 것을 유지합니다.
패드 객체가 많이 있다고 가정 해 봅시다. 각각의 노트 객체가 있습니다 (주석 패드, 패드 hasmany note). 각 패드에는 패드 테이블에 레코드가 있지만 모든 노트에는 데이터베이스에 자체 테이블이 있습니다 ( 'PAD_ {ID}'). 이 스키마는 고정되어 있으며 사용해야합니다.
지금은 저축을 할 필요가 없으므로 읽기를 지원하기 전에 모델 에서이 작업을 수행합니다.
function beforeFind($query_data) {
if(empty($query_data['pad_id'])) {
return false;
} else {
$this->useTable = $query_data['pad_id'];
parent::__construct();
return $query_data;
}
}
이것은 데이터베이스에 사용 된 모델 테이블을 변경하고 Core::debug > 0
. 그러나 0이면 CakePhp가 모델 코드를 캐시하고 테이블을 올바르게 변경하지 않는다고 생각합니다. 어쨌든,/pads/view/{pad_id}를 방문 하거나이 테이블을 동적으로 변경할 때 404 오류가 발생합니다. 디버그를 켜면 잘 작동하기 때문에 정확한 오류가 무엇인지 알 수 없습니다. 따라서이 문제를 디버깅하는 것에 대한 포인터도 도움이 될 것입니다.
감사!
해결책
당신은 사용할 수 있어야합니다 setSource()
테이블을 변경하려면 모델이 사용 중입니다. $this->setSource('pad_x')
테이블을 'pad_x'로 설정하고 모델의 스키마를 재설정합니다. API 참조
다른 팁
노력하다 var $persistModel = false;
컨트롤러 또는 AppController에서.
보다: http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-feed-up-cakephp-apps/