如果模型为Company
,如果我们不覆盖companies
属性,则表名为protected $table
。如果是Book
,则表名为books
。那么为什么不companys
laravel如何理解英语和语法?这些单词在哪里列出?
答案 0 :(得分:4)
Illuminate/Pluralizer负责获取英文单词的变形。它定义了一组不可数字,如:
public static $uncountable = [
'audio',
'bison',
...
'species',
'swine',
'traffic',
'wheat',
];
Pluralizer
内部使用doctrine/inflector
来定义实际逻辑(由几个不同的作者从几个不同的php项目中收集)来反映一个单词。 Inflector
具有插入和单数化单词的一般规则,还定义了未反射的单词或具有不规则复数的单词。
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 :(得分:1)
Laravel非常聪明,可以使用真实的单词。例如,它会将media
表用于Media
模型。
如果您在源代码中看到,您将看到Laravel如何构建表名:
return str_replace('\\', '', Str::snake(Str::plural(class_basename($this))));
首先,Laravel使用Pluralizer::plural()
创建复数,然后将其转换为蛇案。