【问题标题】:Laravel's naming convention [duplicate]Laravel的命名约定[重复]
【发布时间】:2017-01-24 21:41:47
【问题描述】:

如果模型是Company,如果我们不覆盖protected $table 属性,它的表名是companies。如果是Book,则表名是books。那么为什么不companyslaravel 是如何理解英语和语法的呢?这些词在哪里列出?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    Illuminate/Pluralizer 负责获取英语单词的变形。它定义了一组不可数的单词,例如:

    public static $uncountable = [
        'audio',
        'bison',
        ...
    
        'species',
        'swine',
        'traffic',
        'wheat',
    ];
    

    Pluralizer 内部使用doctrine/inflector 定义实际逻辑(由几个不同的作者从几个不同的 php 项目中收集)来变形一个词。 Inflectorplularizesingularize 词的一般规则,也定义了不屈折词或不规则复数词。

    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',
        )
    )
    

    【讨论】:

      【解决方案2】:

      Laravel 足够聪明,可以使用真实的单词。例如,它将使用media 表作为Media 模型。

      如果你会在源代码中看到,你会看到 Laravel 是如何构建表名的:

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

      首先,Laravel 使用 Pluralizer::plural() 创建复数,然后将其转换为蛇形。

      【讨论】:

      • 如果你创建一个模型媒体,我认为 laravel 默认会“认为”媒体模型的表是 medias....这是真的还是假的??
      • 不,Laravel 默认会尝试使用media 表。
      猜你喜欢
      • 2017-05-30
      • 2019-01-19
      • 2010-10-13
      • 1970-01-01
      • 2011-01-08
      • 2016-07-22
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多