2013-09-26 2 views
0

쿼리로 직접 테이블을 만듭니다. 일부 데이터 만 가져 오려고합니다. 그러므로 나는 동적으로 빌드 된 쿼리를 실행하고 Component 클래스에서이 쿼리를 실행 해 봅니다. (이 쿼리를 실행하기 위해 랜덤 한 기존 모델을 사용하는 것이 더 좋은 이유는 무엇입니까?)테이블을 만든 후에 CakePHP에서 테이블을 찾을 수 없습니다.

$query= "CREATE TABLE IF NOT EXISTS testerdbs (
'Ü1' varchar(6) COLLATE utf8_swedish_ci DEFAULT NULL, 
'Ü2' varchar(6) COLLATE utf8_swedish_ci DEFAULT NULL, 
'Ü3' int(3) DEFAULT NULL, 
'Ü4' varchar(6) COLLATE utf8_swedish_ci DEFAULT NULL, 
'Ü5' date DEFAULT NULL 
)" 
$data = ClassRegistry::init('import_files'); 
$data->query($query); 

잘 작동합니다. 동일한 요청에서 컨트롤러의 생성 된 테이블에 액세스하려고합니다.

App::import('Model', "testerdb"); 
//$this->loadModel("testerdb"); 
$newTable = ClassRegistry::init("testerdb"); 
echo '<pre>', print_r($newTable->getColumnTypes()), '</pre>'; 

내가 같은 요청이 실행하려고하면 내가 항상 오류 얻을 : 다시 정확히 같은 요청을 할 경우

Error: Table testerdbs for model testerdb was not found in datasource default.

을 다 한 시간에 대해 구글 ... 을 잘 작동 그것은 케이크가 모델을 캐시하는 것처럼 보였습니다. 이 요청을 다시 실행하면 모든 테이블이 다시 캐시되고 케이크가 테이블을 찾는다. 그래서 같은 요청으로 생성 된 테이블을로드하거나 가져 오기를 원하지만 작동하지 않습니다.

다른 방법으로 테이블을로드 할 수 있습니까? 내 실수는 어디 갔지?

도움 주셔서 감사합니다.

+0

cakephp의 명명 규칙을 읽으십시오. http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm – Aryan

답변

0

왜 임시 테이블 만 갖고 싶습니까? 인 메모리 모델 또는 데이터 구조에 가져 오는 데이터를 임시로 저장합니다.

테이블이 임시 테이블이 아닌 경우 프로그램을 실행하기 전에 정적으로 테이블을 만듭니다.

+0

다른 CSV 파일을 가져옵니다. 파일의 구조는 테이블의 구조를 정의합니다. 그래서 항상 다릅니다. 정적으로 모델을 만들 수없는 이유는 무엇입니까? 하지만 아마 임시 표기가 올바른 표정이 아니 었습니다. 나는이 표가 며칠 동안 필요합니다 ^^ –

1

이것은 조금 오래되었을 수도 있지만 지난 주에 문제를 해결하려고 노력했는데 누군가 도움이되었습니다.

근본적인 문제는 임시 테이블을 만들기 전에 테이블 이름의 캐시가 초기화되므로 'setSource'함수가 임시 테이블이 존재하지 않는다는 오류를 반환한다는 것입니다.

if (method_exists($db, 'listSources'))') 

귀하의 모델을 정의해야한다 :

이 솔루션은 즉 시험에서 모든 것을 당신이 'testerdb'에 대한 작성중인 모델에 대한 'setSource'기능을 overrid과 (테이블 존재 여부에 체크를 제거하는 것입니다 이 같은 것을 찾습니다.

App::uses('AppModel', 'Model'); 
class testerdb extends AppModel { 
public function setSource($tableName) { 
    $this->setDataSource($this->useDbConfig); 
    $db = ConnectionManager::getDataSource($this->useDbConfig); 
    $this->table = $this->useTable = $tableName; 
    $this->tableToModel[$this->table] = $this->alias; 
    $this->schema(); 
    } 
} 

많은 감사를 링크 아래에 게시 누구 이건이 내 CakePHP의 2.0 인스턴스에 근무하고있다 http://web2.0goodies.com/blog/uncategorized/mysql-temporary-tables-and-cakephp-1-3/

,369.
관련 문제