1

我正在计划我的数据库,因为 CakePHP 没有用自己的前缀命名它的类,所以有许多类可能会与根据命名约定创建的模型类发生冲突。

所以我的问题分为三个部分:

  1. 是否有保留的数据库表名列表或检查是否存在的简单方法?如果我计划具有 100 个表的数据库并注意到某些表及其连接必须重命名,那将是一件痛苦的事情......

  2. 有没有一种简单的方法可以在不破坏任何 CakePHP 魔法的情况下解决它?有建议吗?最好的方法是在表名的开头添加自己的前缀“my_”或类似的前缀以其他方式命名表吗?

  3. 命名空间或类似的东西会出现在 CakePHP 版本 2 中,它允许使用各种表名吗?

4

3 回答 3

1

我从经验中知道你不能使用像“文件”和“模型”这样的表名,因为它们创建的类已经被 Cake 用于其他东西,如文件和模型。

我还没有遇到任何其他类似的问题,但我确信它们在那里可以找到。

我建议避免使用蛋糕核心类使用的任何名称。

于 2011-11-09T15:34:22.150 回答
1

我知道这是一个旧线程,但只是在寻找其他东西时遇到了它。我认为这应该有助于回答问题 #2。在 database.php 中,您可以在DATABASE_CONFIG/app/config/database.php 类中添加您的 db 表前缀。请参阅下面配置数组中的最后一个键:

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'database_name',
    'prefix' => '',
);
于 2011-12-08T19:00:42.807 回答
1
  1. 不,没有。只要您遵守 Cake 的命名约定,Cake 并不关心您如何命名您的表。它会在控制器第一次加载模型时生成用于魔术模型方法的模式;你不必抬起一根手指。见http://book.cakephp.org/view/903/Model-and-Database-Conventions

  2. 最好的建议:不要在这件事上与蛋糕争吵。如果你真的不能遵守 Cake 的约定,你还不如不使用 Cake;这非常困难,令人困惑和成功只是意味着你已经失去了 Cake 的大部分举重能力。将您的表名复数并没有那么糟糕,Cake 会很高兴。

  3. 此功能在 1.3 中已经可用 - 为您的表格命名任何您喜欢的名称(只要它们是复数词。)

-- 你可能会很好地在控制台中查看烘焙应用程序,这样你就可以熟悉 Cake 想要看到的内容以及它如何在不同的桌子布局上工作。


澄清后编辑:

您的模型、控制器和视图目录都共享一个通用名称,如下所示:

 // in /app/models/rate.php
class Rate extends AppModel {

     var $name = 'Rate';


// in /app/controllers/rates_controller.php -- note the underscore
class RatesController extends AppController {

    // controllers are capitalized + plural
    var $name = 'Rates';

// 在 /app/views/rates/*.ctp - Cake 的神奇 autoRender 期望找到一个视图文件, // 与渲染它的动作同名 - Rates::index() 的视图是 index.ctp

您所有的模型都扩展了 cake 的 AppModel 类(扩展了 cake 的 Model 类),不需要前缀。所有的控制器都会继承 Cake 的 AppController 类——类名以 Controller 为后缀,文件名以 _Controller 为后缀。

您可以在 /app 中使用 AppModel 和 AppController,它们明确地存在于您可能拥有的任何应用程序范围的自定义方法/属性中。由于您的所有模型/控制器都扩展了它们,因此继承会自动分散您放置在其中的任何属性/方法 - 例如,Auth。^_^

但是你仍然可以命名一个表模型、控制器、视图或其他任何东西,我猜。$name 属性是别名;您可以在同一模型中创建同一个表的多个实例,方法是使用不同的名称为其命名。您可以创建没有表的模型,并且可以在单个模型中在多个表(或数据库或服务器)之间切换。您还可以为模型创建非数据库类型的数据对象(例如平面 xml 文件)。无论如何,动态命名的类/方法($$Model::save() 等)都是在后台运行的。为了干燥我的应用程序,我在迭代中做了类似的事情,我没有遇到问题。(虽然我个人怀疑实际上推出一个名为 Model 的本地模型是否值得你在实验中投入的努力......)

在那一点上,Cake 的 API 说明了它的所有类、它们的方法等(生成代码库中的注释):

http://api13.cakephp.org/classes

HTH。:D

于 2011-06-11T15:15:02.260 回答