【问题标题】:can CakePHP automatically create tables from models?CakePHP 可以自动从模型创建表吗?
【发布时间】:2025-12-24 23:45:12
【问题描述】:

在 python::Pylons 中,我可以发出 setup-app 命令,它会查看我的模型并为我的特定数据库发出适当的 CREATE TABLE 或 CREATE INDEX ddl。

这似乎是 CakePHP 中的一个特性,但我找不到它。

事实上,我在手册中看到了这一点: “您可以像往常一样创建数据库表。当您创建模型类时,它们会自动映射到您创建的表。”

这让我相信它不存在?

【问题讨论】:

  • 哦,我完全误解了它在蛋糕中的工作原理。我猜你根本没有在模型文件中定义模式。所以不要介意这个问题,不过谢谢你的回复……现在更有意义了。

标签: cakephp cakephp-1.3


【解决方案1】:

不,相反,您可以通过 DB 架构创建模型、控制器和视图。首先有一个数据库设计模式更合乎逻辑。

查看this out

【讨论】:

  • 从新应用程序的架构开始是合乎逻辑的,但是在安装基于 Cake 的成品或 Cake 插件的情况下是倒退的,这两者都是在主机上开始生命的具有代码库的服务器期望数据库中不存在的特定模式。我猜“接受”的解决方案是提供一个 .sql 文件并让最终用户手动启动数据库,但这并不能让我很满意。我想为我的成品提供极其简单的首次运行体验。
  • 有一个烘焙模式外壳显然可以帮助您。
  • 烘焙模式能够创建新的数据库表。但是万一给新数据库加表,就不能处理了。
  • 我只能同意beporter。如果您只想插入一个插件并期望它能够工作——就像在大多数其他框架中所做的那样,Cake 处理所需新表的方式非常令人沮丧。烘焙对我来说从来没有用过。
  • 我讨厌需要用链接回答,但是有模式脚本可以在文件中创建或导出数据库结构:book.cakephp.org/2.0/en/console-and-shells/…。 Bake 是一个很棒的工具,@THeSHEEEP 你应该努力让它发挥作用。你总是可以用 /path/to/php /path/to/cake.php 运行它
【解决方案2】:

上面接受的答案中的一些 cmets 引导我创建这个答案。您可以使用 YourModel->query() 函数在技术上动态创建新表。我目前正在写的行为中使用它。这适用于 CakePHP 2.x,很确定它也适用于 1.3。

在行为的设置函数中,我正在检查表是否已经存在。如果没有,我会创建它。

$dataSource = ConnectionManager::getDataSource('your DB');
if(!in_array($tableName, $dataSource->listSources()){
    $this->createYourTableFunction();
}

在 createYourTableFunction 中,您创建一个临时模型来运行 YourModel->query() 。只需提供您的 SQL 指令即可。创建临时模型时,只需将 table 参数设置为 false,这样就不会出现缺少 table 错误。

$YourModel = new Model(array('table' => false, 'name' => 'YourModel', 'ds' => 'Your DB'));
$YourModel->query('SQL instruction string');

【讨论】:

    最近更新 更多