2017-01-24 4 views
3

Wenn das Modell Company ist, lautet der Tabellenname companies, wenn die Eigenschaft protected $table nicht überschrieben wird. Und wenn es Book ist, ist der Tabellenname books. Warum also nicht companys Wie versteht Laravel Englisch und Grammatik? Wo sind diese Wörter aufgeführt?Laravels Namenskonvention

Antwort

4

Illuminate/Pluralizer ist verantwortlich für die Beugung eines englischen Wortes zu bekommen. Es definiert eine Reihe von unzähligen Worten wie:

public static $uncountable = [ 
    'audio', 
    'bison', 
    ... 

    'species', 
    'swine', 
    'traffic', 
    'wheat', 
]; 

Die Pluralizer intern doctrine/inflector verwendet, die die eigentliche Logik definiert (aus verschiedenen PHP-Projekten, die von verschiedenen Autoren gesammelt), ein Wort zu beugen. Inflector hat allgemeine Regeln zu pluarize und singularize Wörter, und definiert auch Wörter, die nicht abgelenkt sind, oder haben unregelmäßige Pluralformen.

private static $plural = array(
    'rules' => array(
     ... 
     '/(x|ch|ss|sh)$/i' => '\1es', 
     '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', 
     '/us$/i' => 'uses', 
     ... 
    ), 
    'uninflected' => array(
     '.*[nrlm]ese', '.*deer', '.*fish', ..., 'people', 'cookie' 
    ), 
    'irregular' => array(
     'atlas' => 'atlases', 
     'axe' => 'axes', 
     'beef' => 'beefs', 
     ... 
     'trilby' => 'trilbys', 
     'turf' => 'turfs', 
     'volcano' => 'volcanoes', 
    ) 
) 
1

Laravel ist intelligent genug, um echte Wörter zu verwenden. Zum Beispiel wird media Tabelle für Media Modell verwendet.

Wenn Sie in den Quellcode sehen werden, werden Sie sehen, wie funktioniert Laravel Tabellenname baut:

return str_replace('\\', '', Str::snake(Str::plural(class_basename($this)))); 

Zuerst Laravel verwendet Pluralizer::plural() Plural zu erstellen und dann wandelt sie in Schlangen Fall.

+0

Wenn Sie ein Modell erstellen Medien ich denke, Laravel wird standardmäßig "denken" die Tabelle für Medienmodell ist Medien .... ist das wahr oder falsch ?? – lewis4u

+0

Nein, Laravel versucht standardmäßig, die 'media' Tabelle zu verwenden. –