Laravel假设数据库表是模型名称的复数形式

时间:2016-06-07 08:32:37

标签: laravel

默认情况下,Laravel假定数据库表是模型名称的复数形式。但是,如果我仍然想要使用此功能,那么如果我的表名是“新闻”怎么办?我应该将其更改为“newses”还是应该使用“new”作为型号名称?

4 个答案:

答案 0 :(得分:8)

如果您的模型以字母' s结尾,则表格名称保持不变。在您的情况下,您的模型会默认为您的表news命名。

如果您想使用其他名称,可以使用:

protected $table = 'tablename';

你的模特内部。

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

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

返回:news

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

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

<?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

答案 3 :(得分:1)

Laravel使用&#34;标准套装&#34;规则定义:

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

因此,它假定一个表是一组记录。

当命名与人类语言的各种特征/陷阱冲突时,命名法存在问题。例如,如果我有一个名为Sheep的模型怎么办?这确实意味着我的数据库表应该被称为&#34; Sheeps&#34;?

由开发人员来避免&#34; Gollum / Smeagol&#34;句法。实际上,你不会想要一个名为&#34; Newses&#34;我最终想要一张名为&#34; Sheeps&#34;的桌子。

最终,我用以下内容构建迁移:

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

对于模特,你会在文档中注意到他们有一个不同的表名,用于&#34; Flights&#34;叫&#34; my_flights&#34;

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

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