Wenn ich ein Modell “Dog” habe, wird Laravel es mit der Tabelle “Dogs” verknüpfen. Immer der Plural. Wenn ich nun ein Modell “Person” habe, versucht es, die Tabelle “People” zu finden – auch den Plural. Aber woher kennt Laravel den Plural, wenn es mehr als nur das Hinzufügen eines “s” ist? Gibt es eine Tabelle mit allen englischen Substantiven?
Wie findet Laravel mehrere Modelle?
fast
Das Alpha
Laravel 4
Im Illuminate\Database\Eloquent\Model.php
Sie finden so etwas wie str_plural($name)
Und str_plural
ist eine Hilfsfunktion, die verwendet Str::plural
Methode und in diesem Fall sieht diese Methode so aus:
public static function plural($value, $count = 2)
{
return Pluralizer::plural($value, $count);
}
Es ist also offensichtlich, Str::plural
Klasse verwendet Illuminate\Support\Pluralizer.php
und dort finden Sie, wie es tatsächlich funktioniert. Lesen Sie einfach den Quellcode. Es gibt eine separate Wortzuordnung für irregular word forms
mit anderen:
// 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',
);
-
gut gesagt mein Freund … gut gesagt 🙂
– Lagbox
29. Mai 2014 um 22:27 Uhr
-
Dasselbe gilt für Lara 6
– ymakux
30. März 2020 um 13:03 Uhr
-
‘status’ => ‘status’ (falls Sie sich gefragt haben, wie ich) (gerade mit PHP Artisan Tinker getestet – Aufruf von Str::plural(‘status’, 2) )
– Pablo Camara
31. August 2022 um 1:03 Uhr
andrewtweber
Laravel 5 & 6
Die Antwort des Alpha war für Laravel 4.
Um zu würdigen, wo es fällig ist, wollte ich die Antwort für Laravel 5+ aktualisieren.
Pluralizer
erstreckt sich nun von Doktrin/Beuger um das Rad nicht neu erfinden zu müssen. Diese Bibliothek enthält einige Grundregeln, z
(m|l)ouse => _ice
(buffal|tomat)o => _oes
...all else... => append 's'
Gefolgt von etwas “nicht flektiert” (dh Singular und Plural sind gleich)
deer, fish, etc.
Und schließlich die unregelmäßigen Regeln, z
man => men
ox => oxen
Aus der Dokumentation:
Doctrine Inflector verfügt über statische Methoden zum Beugen von Text.
Die Methoden in diesen Klassen stammen aus mehreren verschiedenen Quellen, die über mehrere verschiedene PHP-Projekte und mehrere verschiedene Autoren gesammelt wurden. Die ursprünglichen Autorennamen und E-Mail-Adressen sind nicht bekannt.
Pluralize & Singularize-Implementierungen sind mit einigen Modifikationen von CakePHP entlehnt.
Es ist also interessant, wie sehr sich alle Frameworks gegenseitig ausleihen und wiederverwenden.
Wahrscheinlich eine Version davon: php.net/manual/en/function.ngettext.php
– Dylan Brams
29. Mai 2014 um 21:57 Uhr
Die unten als richtig markierte Antwort ist nicht mehr relevant. Die richtige Antwort für v.5 ist jedoch unten.
– PapaHotelPapa
4. März 2016 um 18:10 Uhr