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?

Original source