almo
Si tengo un Modelo “Perro”, Laravel lo vinculará a la tabla “Perros”. Siempre el plural. Ahora, si tengo un Modelo “Persona”, intenta encontrar la tabla “Personas”, también el plural. Pero, ¿cómo reconoce Laravel el plural cuando se trata de algo más que agregar una “s”? ¿Hay una tabla con todos los sustantivos en inglés?
el alfa
Laravel 4
En el Illuminate\Database\Eloquent\Model.php
encontrarás algo como str_plural($name)
y str_plural
es una función auxiliar que utiliza Str::plural
método y en este caso, este método se ve así:
public static function plural($value, $count = 2)
{
return Pluralizer::plural($value, $count);
}
Entonces es obvio que, Str::plural
clase de usos Illuminate\Support\Pluralizer.php
y allí encontrará cómo funciona realmente. Basta con leer el código fuente. Hay un mapeo de palabras separado para irregular word forms
con otros:
// 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',
);
-
bien puesto amigo… bien puesto 🙂
– caja de retraso
29 mayo 2014 a las 22:27
-
Lo mismo para Lara 6
– ymakux
30 de marzo de 2020 a las 13:03
-
‘status’ => ‘status’ (en caso de que te lo estés preguntando, como yo) (recién probado con php crafty tinker – llamando a Str::plural(‘status’, 2))
– Pablo Cámara
31 de agosto de 2022 a las 1:03
andresweber
Laravel 5 y 6
La respuesta de Alpha fue para Laravel 4.
Para dar crédito donde corresponde, quería actualizar la respuesta para Laravel 5+.
Pluralizer
ahora se extiende desde doctrina/inflector para evitar reinventar la rueda. Esta biblioteca contiene algunas reglas básicas, por ejemplo
(m|l)ouse => _ice
(buffal|tomat)o => _oes
...all else... => append 's'
Seguido por algunos “sin inflexiones” (es decir, singular y plural son lo mismo)
deer, fish, etc.
Y finalmente las reglas irregulares, por ejemplo
man => men
ox => oxen
De la documentación:
Doctrine inflector tiene métodos estáticos para flexionar texto.
Los métodos en estas clases provienen de varias fuentes diferentes recopiladas a través de varios proyectos php diferentes y varios autores diferentes. Se desconocen los nombres y correos electrónicos de los autores originales.
La implementación de Pluralizar y Singularizar se tomó prestada de CakePHP con algunas modificaciones.
Por lo tanto, es interesante cuánto se prestan y reutilizan todos los marcos entre sí.
Probablemente alguna versión de esto: php.net/manual/en/function.ngettext.php
–Dylan Brams
29 mayo 2014 a las 21:57
La respuesta marcada como correcta a continuación ya no es relevante. Sin embargo, la respuesta correcta para v.5 se encuentra a continuación.
– PapaHotelPapa
04/03/2016 a las 18:10