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?
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',
);
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.