【问题标题】:Eloquent not adding automatically s at the end of table nameEloquent 不会在表名末尾自动添加 s
【发布时间】:2021-07-31 23:03:17
【问题描述】:

我有一个 Lumen 应用程序。 我刚刚使用此迁移文件创建了一个新的 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';

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

感谢您的帮助。

【问题讨论】:

  • 您是否正确配置了数据库名称?
  • 是的,我做到了。该应用程序中的所有其他控制器都运行良好。
  • 由于“软件”不可数,Laravel 寻找“till_software”。
  • 不可数是什么意思?我可以有很多软件。但我想你可能是对的我认为这里可能有些奇怪但我不明白为什么我不能拥有多个软件。
  • @Fabrice 我没有制定英语规则。

标签: laravel eloquent lumen


【解决方案1】:

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

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

所以这是 User 模型到 users 表中

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

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

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

protected $table = 'till_softwares';

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

【讨论】:

  • 好吧,英文不是我妈妈的名字,所以我可能会在这里漏掉一些东西,但我想我看到了好几次softwares这个词。这句话错了吗:“我在 y 计算机上使用 3 种不同的软件”?
  • 是的,所以“软件”在英语中不是一个词。相反,您可以调整措辞,说“我正在使用 3 种不同的软件。”。
  • 啊啊好我明白了。我想我今天学到了一些关于英语的东西,而不是一些代码:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多