Php 为什么Laravel在加载数据时有时使用单数数据库表名?

Php 为什么Laravel在加载数据时有时使用单数数据库表名?,php,mysql,laravel,Php,Mysql,Laravel,我正在从事一个Laravel项目,该项目使用多个具有复数数据库名称的模型。在本例中,模型: protected $table = 'red_cars'; class-RedCar扩展模型 该表支持: red_cars 我有另一个叫狗的模型,它有一种归属关系: 类狗扩展模型 { 公共功能红(车) { 返回$this->belongtomany(RedCar::class) ->选择(数组('name','description')); } 有一张透视表 dog_red_car 当我访问加

我正在从事一个Laravel项目,该项目使用多个具有复数数据库名称的模型。在本例中,模型:

protected $table = 'red_cars';
class-RedCar扩展模型
该表支持:

red_cars
我有另一个叫狗的模型,它有一种归属关系:

类狗扩展模型
{
公共功能红(车)
{
返回$this->belongtomany(RedCar::class)
->选择(数组('name','description'));
}
有一张透视表

dog_red_car
当我访问加载多个RedCar项目的页面时(使用->load()函数),我会遇到以下错误:

SQLSTATE[42S02]:未找到基表或视图:1146表“my_database.red_car”不存在(SQL:选择
name
version
description
dog\u red\u car
pivot\u dog\u id
dog\u red\u car
作为
pivot\u red\u car\u id
来自
dog\u red\u red\u car\u-code>车的
内部连接
g_红色_车
red_车id
where
dog_红_车
dog_车id
in(1024))

请注意所有的
red\u car
表名都是单数。我不确定是什么原因导致Laravel将该表称为单数。该模型当前没有
protected$table
变量,因此Laravel应默认为复数版本。我已搜索了整个项目,但找不到任何单数的代码(显然)参考名为
red\u car
的数据库表。此外,我在任何地方都找不到“单数”一词。迁移显示复数名称:

Schema::create('red_cars', function (Blueprint $table) {
代码中还有其他几个地方使用了表名的复数形式。是什么让Laravel使用这个表名的单数形式呢?这个项目还有其他几个belongTomany关系,但似乎只有一个存在这个问题。我设法添加了一个快速修复程序,通过添加一个
$table
到模型:

protected $table = 'red_cars';

显然,这迫使拉威尔使用红色汽车(这是正确的复数形式)页面加载时不会出错。但是,我担心有一个神秘的设置会在以后导致单复数数据库问题。

Laravel是一个非常简单的框架,希望具有包容性;尝试在其中添加许多功能,以使使用它的开发人员的工作更轻松。一种方法是thr通过artisan命令,可以在几秒钟内完成大量的搭建工作,从而消除了对文件名协调和管理的艰苦需求

Laravel遵循严格的命名约定,您可以在这里阅读

你开过车吗

PHP artisan make:model RedCar -a
指挥部

-a标记自动为该模型创建“所有”必要的文件;迁移、播种器和控制器

您还可以阅读Laravel文档中的其他标记

protected $table = 'red_cars';

希望我能帮助您。

有时这种情况会发生。最好在您的模型中添加一个默认表名,这样Laravel就不会犯这种错误。

最好明确说明这些事情。我在我的每个模型中都设置了
$table
属性,以避免与复数器的逻辑有关的任何有趣的事情。
从车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入车内加入_car@IGP是的,我就是这样解决这个问题的。但是,我想找到单数表名的来源。Laravel应该使用复数名。为什么它在查找时会呈现单数表名呢re是一个编辑。请找到并发布原始帖子中所问问题的答案。谢谢,我知道artisan命令。