像這樣的事情可能會做你要找的東西,但確實需要每個模型的額外查詢。
<?php
class AppModel extends Model {
var $create_query = false;
function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
if (!empty($this->create_query)) {
$this->query($this->create_query);
}
}
}
?>
然後,您只需要在模型中添加var $create_query = 'CREATE TABLE IF NOT EXISTS ...
;`。 MySQL CREATE TABLE documentation有關於IF NOT EXISTS的更多信息。
但是,我不確定這是不是試圖調用查詢()太早。或前檢查,看看錶已經存在,它會有是。否則,CakePHP會出錯而不是創建表。關於這個主題沒有太多的文檔,你最好直接去看看cake/libs/model/model.php的更多信息。
更新:上面的代碼所寫是行不通的。
在深入研究Model類後,Model :: __構造調用Model :: setSource()。 Model :: setSource()檢查表是否存在,如果不存在則拋出錯誤。要使用此方法,那就是您必須重寫並插入查詢的位置。下面的代碼可能需要不同,具體取決於您使用的CakePHP版本。
<?php
function setSource($tableName) {
// From Model::setSource(). I believe this is needed to make query() work.
$this->setDataSource($this->useDbConfig);
// Create our table if we have a create query
if (!empty($this->create_query)) {
$this->query($this->create_query);
}
// Now call the parent
parent::setSource($tableName);
}
?>
這實際上正是我正在研究的內容 - 要麼將錯誤頁面中的鏈接提供給將自動填充表格的腳本,要麼只是在錯誤類中進行,如果這是生成的錯誤。謝謝! – Magsol 2009-10-31 20:52:24
@Magsol你究竟是怎麼實現這個的?我很好奇。 – khany 2014-05-30 09:38:14
很難確定 - 這是前一段時間 - 但我確信我創建了一個AppError類,並用代碼覆蓋missingTable錯誤函數以生成數據庫模式。拿一點鹽吧:我懷疑CakePHP在5年內發生了很大變化! – Magsol 2014-05-30 15:37:09