Comment Laravel trouver pluriel de modèles?

si J'ai un modèle de "chien", Laravel le liera à la table "chiens". Toujours au pluriel. Maintenant, si j'ai un Modèle de "Personne", il essaie de trouver la table "Personnes" - le pluriel. Mais comment Laravel connaît-il le pluriel quand il ne s'agit pas seulement d'ajouter un "s"? Est-il un tableau avec tous les noms anglais?

19
demandé sur almo 2014-05-30 01:54:56

2 réponses

Dans le Illuminate\Database\Eloquent\Model.php vous trouverez quelque chose comme str_plural($name) et str_plural est une fonction d'assistance qui utilise Str::plural méthode et dans ce cas, cette méthode ressemble à ceci:

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

il est Donc évident que, Str::plural utilise la classe Illuminate\Support\Pluralizer.php et là, vous trouverez comment il fonctionne réellement. Il suffit de lire le code source. Il y a un mot séparé "mapping" pour irregular word forms avec les autres:

// 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',
);
31
répondu The Alpha 2015-05-20 10:50:30

la réponse de L'Alpha était pour Laravel 4.

pour donner le crédit où il est dû je voulais mettre à jour la réponse pour Laravel 5.

Pluralizer s'étend désormais de doctrine / inflecteur pour éviter de réinventer la roue. Cette bibliothèque contient quelques règles de base, par exemple,

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

Suivi de certains "sans altération" (c'est à dire le singulier et le pluriel sont les mêmes)

deer, fish, etc.

et enfin les règles irrégulières, par exemple

man  => men
ox   => oxen

à Partir de la documentation:

doctrine inflector a des méthodes statiques pour infléchir le texte.

les méthodes de ces classes proviennent de plusieurs sources différentes à travers différents projets php et plusieurs auteurs différents. Le les noms des Auteurs originaux et les courriels ne sont pas connus.

L'implémentation de Pluralize & Singularize est empruntée à CakePHP avec quelques modifications.

il est donc intéressant de voir à quel point les cadres empruntent et réutilisent les uns des autres.

17
répondu andrewtweber 2018-08-09 21:00:02