我正在进行一个Laravel项目,该项目使用多个具有多个数据库名称的模型。在本例中,模型:
class RedCar extends Model
由表支持:
red_cars
我有另一个叫Dog的模型,它有一种belongToMany关系:
class Dog extends Model
{
public function red_cars()
{
return $this->belongsToMany(RedCar::class)
->select( array('name','description') );
}
有一个数据透视表
dog_red_car
当我访问一个加载了几个RedCar项目的页面(使用->load((函数(时,我会得到以下错误:
SQLSTATE[42S02]:找不到基表或视图:1146表"my_database.red_car"不存在(SQL:从
name
0内部选择CCD_1、version
、description
、dog_red_car
.dog_id
作为pivot_dog_id
,dog_red_car
.red_car_id
作为pivot_red_car_id
加入red_car
上的red_car
。id
=dog_red_car
.red_car_id
,其中dog_red_car
.dog_id
在(1024(中(
请注意所有red_car
表名都是单数。我不确定是什么原因导致拉拉维尔将该表称为单数。该模型目前没有protected $table
变量,因此Laravel应该默认为复数版本。我已经搜索了整个项目,找不到任何(显然(引用名为red_car
的数据库表的代码。此外,我在任何地方都找不到"单数"这个词。迁移显示了一个复数名称:
Schema::create('red_cars', function (Blueprint $table) {
代码中还有其他几个地方使用了表名的复数形式。是什么让Laravel使用这个表名的单数形式?该项目还有其他几个belongToMany关系,但似乎只有一个存在此问题。我设法添加了一个快速修复程序,通过在模型中添加$table
来纠正错误:
protected $table = 'red_cars';
显然,这迫使Laravel使用red_cars(这是正确的复数形式(,页面加载时不会出错。然而,我担心有一个神秘的设置会在以后引起单数-复数数据库问题。
有时它只是发生而已。最好在你的模型中添加一个默认的表名,这样Laravel就不会犯这个错误。
Laravel,是一个非常简单的框架,希望具有包容性;尝试在其中添加许多功能,以使使用它的开发人员的工作更轻松。它的一种方法是通过手工命令,这些命令在几秒钟内完成了大量的脚手架工作,并消除了对艰苦的文件名协调和管理的需要。
Laravel遵循严格的命名惯例,你可以在这里阅读https://webdevetc.com/blog/laravel-naming-conventions
你运行了吗
PHP artisan make:model RedCar -a
命令?
-a标记会自动为该模型创建"所有"必要的文件;迁移、播种机和控制器。
您也可以阅读Laravel文档中的其他标签。当遵循命名约定时,就不需要使用显式地指向表
protected $table = 'red_cars';
希望我能帮你。