如何在CakePHP中使模型的数据库可移植?

时间:2009-03-02 19:14:30

标签: database cakephp primary-key portability

我对蛋糕不太熟悉..所以这是我的问题..我们正在开发一个关于mysql的应用程序,但最终可能需要部署到mssql或oracle。我们如何确保我们的主键不会出现奇怪的问题?在mysql中它们是AUTO INCREMENT列,但是oracle中的IIRC你需要使用序列...有没有办法使这个变为透明?我在想它吗?

有没有人有使用cakephp应用程序切换数据库供应商的经验?任何指针或事物要留意?

3 个答案:

答案 0 :(得分:1)

在Cake数据库配置文件中,您选择了驱动程序(请参阅http://book.cakephp.org/view/40/Database-Configuration)。然后,如果您使用字段名id设置PK(如果使用MySQL,也将是您的A_I列),Cake将自动处理auto_increment插入。我认为(NB:没有尝试过Cake /其他的东西),Cake会像甲骨文那样处理A_I列。

Cake使用自己的数据库抽象层 - 但是所包含的抽象覆盖了很多,并且它将按指定的方式执行(即它将为您处理自动增量内容)。

简而言之,你可能会过度思考。也就是说,我会模拟一个小蛋糕应用程序,然后尝试在其后面切换数据库(更改您的数据库配置,您的应用程序应自动切换)。

HTH, 特拉维斯

答案 1 :(得分:1)

以下做法对我很有用

我使用蛋糕模式(我倾向于为每组模型设置1个模式文件.I.E。User,Role,Profile可能都在一个UsersSchema文件中)

另外,请看一下使用debuggable.com FixturesShell - 它允许您将测试用例夹具导入到实时数据库中。非常适合从架构文件中设置初始用户和角色组。

另外,如果将'id'字段设置为VARCHAR(36)而不是INT(#),cake将自动使用UUID样式id。这意味着如果您需要将数据移动到另一个应用程序或服务器,那么您的数据发生id值冲突的可能性会降低FAR FAR。

fixtures shell还有一个用于生成uuids的命令行工具(因此您可以将它们添加到夹具中的$ records变量以便插入等)。

总结 - 使用CakeSchema架构shell,来自debuggable.com的fixtures shell和id的UUID值,它应该为您提供便携式结构创建工具,便携式数据插入工具和便携式id字段格式。 / p>

http://github.com/felixge/debuggable-scraps/tree/fd0e5ad625cb21f5ba16e6b186821a5774089ac7/cakephp/shells/fixtures

http://api.cakephp.org/class/schema-shell

答案 2 :(得分:0)

您需要使用“蛋糕架构”来管理您的数据库。这将在您创建数据库时处理所有特定于数据库的内容。

http://book.cakephp.org/view/735/Generating-and-using-Schema-files