How does Laravel find plural of models?
laravel, laravel-4, php
Solution
Laravel 4
In the `Illuminate\Database\Eloquent\Model.php` you'll find something like `str_plural($name)` and `str_plural` is a helper function which uses `Str::plural` method and in this case, this method looks like this:
public static function plural($value, $count = 2)
{
return Pluralizer::plural($value, $count);
}
So it's obvious that, `Str::plural` uses class `Illuminate\Support\Pluralizer.php` and there you'll find how it actually works. Just read the source code. There is a separate word mapping for `irregular word forms` with others:
// 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',
);
Problem
If I have a Model "Dog", Laravel will link it to the table "Dogs". Always the plural. Now, if I have a Model "Person", it tries to find the table "People" - also the plural. But how does Laravel know the plural when it's more than just adding a "s"? Is there a tabel with all english nouns?