【发布时间】:2017-01-24 21:41:47
【问题描述】:
如果模型是Company,如果我们不覆盖protected $table 属性,它的表名是companies。如果是Book,则表名是books。那么为什么不companyslaravel 是如何理解英语和语法的呢?这些词在哪里列出?
【问题讨论】:
标签: laravel
如果模型是Company,如果我们不覆盖protected $table 属性,它的表名是companies。如果是Book,则表名是books。那么为什么不companyslaravel 是如何理解英语和语法的呢?这些词在哪里列出?
【问题讨论】:
标签: laravel
Illuminate/Pluralizer 负责获取英语单词的变形。它定义了一组不可数的单词,例如:
public static $uncountable = [
'audio',
'bison',
...
'species',
'swine',
'traffic',
'wheat',
];
Pluralizer 内部使用doctrine/inflector 定义实际逻辑(由几个不同的作者从几个不同的 php 项目中收集)来变形一个词。 Inflector 有plularize 和singularize 词的一般规则,也定义了不屈折词或不规则复数词。
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',
)
)
【讨论】:
Laravel 足够聪明,可以使用真实的单词。例如,它将使用media 表作为Media 模型。
如果你会在源代码中看到,你会看到 Laravel 是如何构建表名的:
return str_replace('\\', '', Str::snake(Str::plural(class_basename($this))));
首先,Laravel 使用 Pluralizer::plural() 创建复数,然后将其转换为蛇形。
【讨论】:
media 表。