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

Posted

技术标签:

【中文标题】为啥即使模型名称在 Laravel 上是复数,它也能工作?【英文标题】:why does it works even though Model name is plural on Laravel?为什么即使模型名称在 Laravel 上是复数,它也能工作? 【发布时间】:2019-08-02 11:09:15 【问题描述】:

我是 Laravel 的新手。

在学习 Laravel 时,我注意到我所做的所有 Model 都是用复数命名的,但它可以正常工作。

我想知道这是怎么发生的,因为我在注意到这一点后阅读了文档,上面写着“模型应该以单数命名。”。

谁能解释一下它是如何工作的??

附:这些模型中没有提到$table

很抱歉,我想说“单数”而不是“音节”。

【问题讨论】:

参考这个链接可能对你有帮助 @AnkurTiwari 谢谢,但你可能忘了留下我认为的链接 :) 哎呀,对不起laracasts.com/discuss/channels/eloquent/… @AnkurTiwari 谢谢!我读过,我不得不说我已经知道复数表是默认命名的。我想知道的是为什么可以将 Model 命名为复数,但真的很感谢 【参考方案1】:

laravel 的一般约定是对模型使用单数名称,对表使用复数名称。请注意,您可以在模型中使用 protected $table = 'yourTableName'; 更改关联的表名称。我个人认为手动设置是一个好习惯。

我无法解释它是如何获得关联的表名的,因为它将是一篇文章(我也不确定我能否正确解释),但我可以将您带到正确的方向。

由于 laravel 是开源的,您实际上可以深入了解它的工作原理。您可以去framework/src/Illuminate/Database/Eloquent/Model.php 或查看online 以查看关联功能。您将看到getTable 函数将返回表名。但它使用了另一个功能。所以你需要看看那个函数里有什么。

经过几次挖掘,您会发现 laravel 实际上使用了不同的库来帮助获取项目名称。它使用inflector。您可以浏览一下它以了解它是如何获得复数名称的。在那里你可以找到底层代码和规则等来了解它是如何工作的。

【讨论】:

感谢您的回答!我有个问题。这就是为什么那些被命名为复数的模型即使它应该被命名为单数的原因吗? 如果模型名称是复数形式,则变形库的复数函数返回相同的表名。但是,相反的做法是行不通的。如果表名和模型名都是单数,则默认情况下将不起作用。您需要明确设置它们之间的关系。

以上是关于为啥即使模型名称在 Laravel 上是复数,它也能工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥复数的绝对值是浮点数?

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

Ruby on Rails 复数模型名称

我有一个密码和一个确认密码字段,我已经使用 laravel 对其进行了验证,但即使两个字段的密码相同,它也显示不匹配?

Laravel 5.2错误-----Base table or view not found: 1146 Table

覆盖rails3中模型名称的默认复数