【问题标题】:Laravel assumes the database table is the plural form of the model nameLaravel 假设数据库表是模型名称的复数形式
【发布时间】:2016-06-07 08:32:36
【问题描述】:

默认情况下,Laravel 假设数据库表是模型名称的复数形式。但是如果我的表名是“news”并且我仍然想使用这个功能怎么办?我应该将其更改为“newses”还是应该使用“new”作为模型名称?

【问题讨论】:

  • 我建议你使用“newses”来避免未来的头疼
  • 我建议使用单数 news,因为在某些时候您将创建一个具有单数名称的模式,然后您就会遇到令人讨厌的不一致/反模式。另一件事,而不是给你答案(像其他人一样),我会评论reference to the documentation,这样你将来可以帮助自己:)
  • 请注意,较新版本的 Laravel 将使用一组规则来定义表名应该是什么:github.com/doctrine/inflector/blob/1.3.x/lib/Doctrine/Common/…

标签: laravel eloquent


【解决方案1】:

您可以通过在模型上定义表格属性来指定自定义表格,如下所示

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'my_flights';
}

参考:https://laravel.com/docs/5.1/eloquent

【讨论】:

【解决方案2】:

如果您有一个以字母“s”结尾的模型,它将保持表名相同。在您的情况下,您的模型默认将您的表命名为 news

如果你想使用另一个名字,你可以使用:

protected $table = 'tablename';

在您的模型内部。

编辑:我在我的应用程序中对此进行了测试。我制作了一个名为News 的模型。然后我创建了一个News 的新实例并检索了表名:

$news = new News();
dd($news->getTable());

返回:news

【讨论】:

    【解决方案3】:

    Laravel 使用“标准集”规则定义:

    • 模型是记录的单个实例
    • 集合是一个或多个记录

    因此它假定表是记录的集合。

    当命名法与人类语言的各种功能/陷阱发生冲突时,它会出现问题。例如,如果我有一个名为 Sheep 的模型怎么办?这是否意味着我的数据库表应该被称为“羊”?

    避免使用“Gollum/Smeagol”语法由开发人员决定。确实,您不会想要一个名为“Newses”的表格,而我希望最终得到一个名为“Sheeps”的表格。

    最终,我使用以下方法构建迁移:

    sudo php artisan make:migration create_sheep_table --create=sheep
    

    至于模型,您会在文档中注意到它们为“Flights”有一个不同的表名,称为“my_flights”

    https://laravel.com/docs/master/eloquent#defining-models

    同样,由开发人员/数据库经理决定在应用程序上下文中有意义的命名约定。

    【讨论】:

    • 太糟糕了.. Laravel 的大灵感(Ruby on Rails)是另一个众所周知的使用复数形式作为表名的框架。但它们包括处理不规则复数的功能。这有点违背他们保持简单的座右铭.. Laravel 没有一个工具可以达到这个目的吗?
    【解决方案4】:

    在您的 eloquent 模型中,您必须定义 table name。例如,如果我的模型被命名为user 并且数据库中的表被命名为user_of_application 那么我就是这样做的

    class user extends Model
    {
        protected $table = 'user_of_application';
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 2014-02-19
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2021-11-08
      • 2014-07-19
      • 1970-01-01
      相关资源
      最近更新 更多