Laravel如何找到多个模型?

问题描述 投票:23回答:2

如果我有模型“ Dog”,Laravel会将其链接到表“ Dogs”。总是复数。现在,如果我有一个模型“ Person”,它将尝试查找表“ People”-也是复数。但是,Laravel如何知道不仅仅是加一个“ s”的复数?是否有一个包含所有英语名词的表格?

laravel laravel-4
2个回答
34
投票

Laravel 4

Illuminate\Database\Eloquent\Model.php中,您会发现类似str_plural($name)的内容,并且str_plural是使用Str::plural方法的辅助函数,在这种情况下,此方法如下所示:

public static function plural($value, $count = 2)
{
    return Pluralizer::plural($value, $count);
}

因此很明显,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',
);

22
投票

Laravel 5和6

[Alpha的答案是Laravel 4。

要在适当的位置注明我想更新Laravel 5+的答案。

Pluralizer现在从doctrine/inflector延伸,以避免重新发明轮子。该库包含一些基本规则,例如

(m|l)ouse         => _ice
(buffal|tomat)o   => _oes
...all else...    => append 's'

后接一些“不变形”(即单数和复数相同)

deer, fish, etc.

最后是不规则的规则,例如

man  => men
ox   => oxen

从文档中:

Doctrine变形器具有用于变形文本的静态方法。

这些类中的方法来自几个不同的来源跨越几个不同的php项目和几个不同的作者。的原始作者姓名和电子邮件未知。

Purealize&Singularize实现是从CakePHP借来的,并做了一些修改。

因此,有趣的是,所有框架相互之间有多少借用和重用。

© www.soinside.com 2019 - 2024. All rights reserved.