我正在开发一个 Laravel 项目,该项目使用多个具有多个数据库名称的模型。在此示例中,模型:
class RedCar extends Model
由表支持:
red_cars
我有另一个名为 Dog 的模型,它有一个 belongsToMany 关系:
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:选择、、、、.
nameas 、.asversionfrom inner join on . = . where . in ( 1024) )descriptiondog_red_cardog_idpivot_dog_iddog_red_carred_car_idpivot_red_car_iddog_red_carred_carred_cariddog_red_carred_car_iddog_red_cardog_id
请注意所有red_car表名都是单数的。我不确定是什么导致 Laravel 将该表称为单数。该模型目前没有protected $table变量,因此 Laravel 应该默认使用复数版本。我已经搜索了该项目,但找不到任何(显然)引用名为red_car. 另外,我在任何地方都找不到“单数”这个词。迁移显示一个复数名称:
Schema::create('red_cars', function (Blueprint $table) {
代码中还有其他几个地方使用了表名的复数形式。是什么让 Laravel 使用这个表名的单数形式?该项目有几个其他的 belongsToMany 关系,但只有一个似乎有这个问题。我设法添加了一个快速修复程序,通过向$table模型添加 a 来纠正错误:
protected $table = 'red_cars';
显然这迫使 Laravel 使用 red_cars (这是正确的复数形式)并且页面加载没有错误。但是,我怕有一个神秘的设置会导致以后出现单复数数据库问题。