2013-09-26 85 views
0

我直接通過查詢創建表。我只想導入一些數據。因此,我執行一個動態構建的查詢,並嘗試在Component-class中執行此查詢。 (我用隨機存在的模型來執行這個查詢有沒有更好的理由?)創建表後,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'函數返回一個臨時表不存在的錯誤。

的解決方案是overrid爲您創造「testerdb」模型中的「的SetSource」功能,並刪除表上存在的檢查(即測試內的一切:

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

你的模型定義應是這個樣子:

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/