首页 > 解决方案 > Eloquent 不会在表名末尾自动添加 s

问题描述

我有一个流明应用程序。我刚刚使用此迁移文件创建了一个新的 TillSoftware 模型

Schema::create('till_softwares', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string("name", 120);
        $table->timestamps();
    });

但是当我只是运行这样一个简单的请求时

$softwareList = TillSoftware::all();

我收到一条错误消息

Next Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database.till_software' doesn't exist 

它似乎没有在表名末尾添加通常的额外 s 并尝试向till_software 而不是till_softwares 发出请求。我有 20 多个其他模型运行不正常,据我所知,软件的复数是软件。

我在这里遗漏了一些明显的东西吗?我仍然可以添加一个额外的

protected $table = 'till_softwares';

在我的模型上,但我更愿意了解我做错了什么。

谢谢您的帮助。

标签: laraveleloquentlumen

解决方案


所以 laravel 将使用Str::plural()查找模型名称的复数来查找表名,因为这是标准的。

>>> Str::plural('user')
=> "users"

所以这是表格中的User模型users

>>> Str::plural('software')
=> "software"

但是software的复数是software,所以就是表名。

如果你想使用软件你需要按照你说的去做

protected $table = 'till_softwares';

但我会说最好使用标准表名,所以应该是till_software


推荐阅读