像这样的事情可能会做你要找的东西,但确实需要每个模型的额外查询。
<?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