5

我对 PHP 比较陌生。开始学习 PHP,但后来遇到了 cakePHP,据说可以加快开发时间。

阅读文档和博客教程后,我仍然不明白命名约定。我想在我开始做一些例子之前我不会知道,但是为了让我开始,有人可以向我解释 cakePHP 如何将数据库表关联到控制器/模型层吗?

下面的代码是教程的摘要。它是一个将 post id 传递给视图层的控制器方法。数据库表称为“posts”。$this->Post 指的是 Post 的模型类,对应于数据库中帖子的复数形式。

public function view($id = null) {
  $this->Post->id = $id;
  $this->set('post', $this->Post->read());
}

好的,我明白了。然后,在文档中它指的是以下相关性:

真正的大人物和真正的大人物

所以看起来相关性实际上遵循英语语义中的规则。这是否意味着 cakePHP 有一个单数和复数单词列表隐藏在它工作的某个地方?例如,我可以在不破坏代码的情况下使用以下相关性吗?

这和这些人和人脚和脚驼鹿和驼鹿鹅和鹅

此外,如果我的数据库中有单数和复数形式的表,它会破坏代码,还是只会与复数形式的表相关联?

只是觉得莫名其妙......为什么他们不能像 for like 和前缀一样匹配命名约定?

4

1 回答 1

17

变形器

CakePHP 使用它的Inflector类来确定事物的复数形式。

由于命名约定规定模型名称是单数,表名称是复数,因此它使用变形器来应用英语语义/规则来确定复数。

如果您在理解 Inflector 的输出方面需要一些帮助,可以使用CakePHP inflector 网站

多元化例子

Model name: Post
Table name: posts

Model name: User
Table name: users

Model name: Sheep
Table name: sheep

Model name: News
Table name: news

Model name: Radius
Table name: radii

检查 Inflector 站点以确保。

非标准表名

虽然 CakePHP 为命名和约定提供了标准规则集,但没有一个是一成不变的。如果要更改用于特定模型的表名,只需在模型中指定表名:

class Thing extends AppModel {
    public $useTable = 'somethings';
}

或者,如果您想要一个不使用表格的模型:

class Post extends AppModel {
    public $useTable = null;
}
于 2012-08-09T04:32:57.573 回答