在 cakePHP 上使用单数和复数模型名称访问模型的差异

Posted

技术标签:

【中文标题】在 cakePHP 上使用单数和复数模型名称访问模型的差异【英文标题】:Differences accessing a model using singular and plural model name on cakePHP 【发布时间】:2011-10-20 12:11:02 【问题描述】:

单数和复数型号名称的不同用途是什么?如果我们有一个名为 Catalogue 的模型,保存为 catalog.php。然后,我们有一个控制器。如果我们使用“$uses”变量来定义应该涉及哪个模型,请参见下面的代码:

class CataloguesController extends AppController 
    var $name = 'Catalogues';
    var $uses = array('Hierarchy', 'Catalogue', 'Catalogues');

我上面已经提到,相关的模型只有一个目录。

访问有什么区别:

$queried = $this->Catalogues->find('all');

$queried = $this->Catalogue->find('all');

【问题讨论】:

一句话,约定。 Cake 假设模型名称是单数的。尽量少与公约作对。 【参考方案1】:

区别在于模型的复数形式无效。模型名称总是单数。

【讨论】:

正确,模型的约定名称应该是单数。但是如果我们使用复数模型名称(条件:我们只有 Catalogue.php),使用 'Catalogues' 将得到与 'Catalogue' 模型相同的结果。为什么 cakePHP,允许访问复数模型名称(请参阅我的前置条件)。 那我不明白你的问题。惯例是模型是单数的。如果 Cake 允许您使用复数形式访问它,那是副作用或错误。至于“有什么区别”这个问题 - 没有,除了复数不保证总是有效。 我完全同意,可能是副作用或错误。我只是想知道 cakePHP 是否允许它出于某种目的。【参考方案2】:

另外 - 如果您的模型表是目录,则模型名称应为 Catalog,文件名应为 catalogue.php。

您的文件名与您的型号名称不匹配。

【讨论】:

是的,我有一个名为“目录”的表。并且还有名为“目录”的模型。为什么 cakePHP 允许同时使用 'Catalogue' 和 'Catalogues' 访问该模型? 不是——当您引用 Catalogs 时,它几乎可以肯定是 AppModel 的一个实例,而不是 Catalogue。 AppModel 的一个实例?那么,为什么它可以提供对“目录”表的访问。我忘了说,上面的两个语句都返回相同的结果。 如果您尝试调用一个没有模型文件但有相应 db table cake 的模型,将自动使用 AppModel 的实例。尝试查看这两个模型中的每一个是 AppModel 的实例还是它本身。否则,我可能会检查 Inflector 并查看它是否可能对那个词起作用。

以上是关于在 cakePHP 上使用单数和复数模型名称访问模型的差异的主要内容,如果未能解决你的问题,请参考以下文章

Rails Association Has_One 具有复数模型名称而不是单数且不工作

复数如何在 Sequelize 中工作?

Ruby on Rails 复数模型名称

为啥即使模型名称在 Laravel 上是复数,它也能工作?

php 分页自动单数/复数邮政类型名称

智能复数总是智能的?