alm*_*lmo 23 laravel laravel-4
如果我有一个模型"狗",Laravel会将它链接到"Dogs"表.永远是复数.现在,如果我有一个模型"人物",它会尝试找到表"人物" - 也就是复数.但是,当Laravel不仅仅是添加"s"时,他们如何知道复数?是否有所有英语名词的表格?
The*_*pha 35
在Illuminate\Database\Eloquent\Model.php你会发现类似的东西str_plural($name) ,str_plural是一个使用Str::plural方法的辅助函数,在这种情况下,这个方法看起来像这样:
public static function plural($value, $count = 2)
{
return Pluralizer::plural($value, $count);
}
Run Code Online (Sandbox Code Playgroud)
所以很明显,Str::plural使用类Illuminate\Support\Pluralizer.php,你会发现它实际上是如何工作的.只需阅读源代码.irregular word forms与其他人有单独的单词映射:
// Taken from Illuminate\Support\Pluralizer
public static $irregular = array(
'child' => 'children',
'foot' => 'feet',
'freshman' => 'freshmen',
'goose' => 'geese',
'human' => 'humans',
'man' => 'men',
'move' => 'moves',
'person' => 'people',
'sex' => 'sexes',
'tooth' => 'teeth',
);
Run Code Online (Sandbox Code Playgroud)
and*_*ber 22
Alpha的答案是Laravel 4.
为了给予应有的信用,我想更新Laravel 5的答案.
Pluralizer现在从doctrine/inflector延伸,以避免重新发明轮子.该库包含一些基本规则,例如
(m|l)ouse => _ice
(buffal|tomat)o => _oes
...all else... => append 's'
Run Code Online (Sandbox Code Playgroud)
其次是一些"未反射"(即单数和复数相同)
deer, fish, etc.
Run Code Online (Sandbox Code Playgroud)
最后是不规则的规则,例如
man => men
ox => oxen
Run Code Online (Sandbox Code Playgroud)
从文档:
Doctrine变换器具有用于调整文本的静态方法.
这些类中的方法来自几个不同的PHP项目和几个不同的作者收集的几个不同的来源.原作者姓名和电子邮件未知.
通过一些修改从CakePHP借用了Pluralize&Singularize实现.
因此,有趣的是,所有框架都相互借用和重用.